Am I actually using YSQL Connection Manager? (YCM)

YSQL Connection Manager (YCM) is easy to enable and just as easy to accidentally connect around it during testing. That’s not misuse; it’s a natural outcome of how YugabyteDB exposes two different YSQL ports when YCM is enabled.

Under the hood, YCM runs as its own Odyssey-based connection manager path, separate from the PostgreSQL backend process. Both can accept connections successfully, but they behave very differently.

This tip shows the fastest, zero-guesswork way to prove whether your current session is using YSQL Connection Manager, explains why the answer flips by port, and shows how to verify what’s actually running on the node.

βœ… The fastest proof: SHOW yb_is_client_ysqlconnmgr

From any YSQL session:

				
					SHOW yb_is_client_ysqlconnmgr;
				
			

Results are definitive:

Result Meaning
on Your client is connected through YSQL Connection Manager (Odyssey).
off Your client is connected directly to the PostgreSQL backend.

No logs. No metrics. No guesswork.

There are a few additional ways to check the value of yb_is_client_ysqlconnmgr:

				
					SELECT current_setting('yb_is_client_ysqlconnmgr');
SELECT setting, short_desc FROM pg_settings WHERE name = 'yb_is_client_ysqlconnmgr';
				
			
πŸ§ͺ Example: single-node yugabyted

Start YugabyteDB with YCM enabled:

				
					yugabyted start --tserver_flags="enable_ysql_conn_mgr=true"
				
			

Now compare the two ports:

				
					# YCM (client-facing)
ysqlsh -h 127.0.0.1 -p 5433 -c "SHOW yb_is_client_ysqlconnmgr;"

# Direct PostgreSQL backend
ysqlsh -h 127.0.0.1 -p 6433 -c "SHOW yb_is_client_ysqlconnmgr;"
				
			

Example:

				
					[root@localhost ~]# # YCM (client-facing)
ysqlsh -h 127.0.0.1 -p 5433 -c "SHOW yb_is_client_ysqlconnmgr;"
 yb_is_client_ysqlconnmgr
--------------------------
 on
(1 row)

[root@localhost ~]# # Direct PostgreSQL backend
ysqlsh -h 127.0.0.1 -p 6433 -c "SHOW yb_is_client_ysqlconnmgr;"
 yb_is_client_ysqlconnmgr
--------------------------
 off
(1 row)
				
			

Same node. Same DB. Same user… but, Different port β†’ different connection path.

πŸš€ One-liner: show both ports from live processes

This inspects the running processes and prints the ports side-by-side. It works whether PostgreSQL was started with -p or only exposes the port via its socket path (-k):

				
					echo "YCM port: $(ps -ef | grep '[y]b-tserver' | sed -n 's/.*--pgsql_proxy_bind_address=[^:]*:\([0-9]\+\).*/\1/p') | Postgres port: $(ps -ef | grep '[p]ostgres .*\/postgres\b' | sed -n 's/.* -p \([0-9]\+\).*/\1/p')"
				
			

Example output:

				
					YCM port: 5433 | Postgres port: 6433
				
			
πŸ€” Why does it change by port?

When YSQL Connection Manager is enabled, YugabyteDB exposes two YSQL entry points:

Port Purpose
YCM port
(commonly 5433)
Client connections go through Odyssey (pooling & multiplexing).
Postgres port
(often 6433)
Direct connections to the PostgreSQL backend (no pooling).

Both connections can succeed, but only one goes through YCM.

πŸ”’ YSQL ports, clearly explained
What is ysql_port?

ysql_port is the TCP port on which the YSQL (PostgreSQL-compatible) API listens for client connections.

  • ● Default (no YCM): 5433
  • ● Clients connect directly to PostgreSQL.
How can it be configured?
  • ● yugabyted: --ysql_port=<port>

  • ● YB-TServer: --pgsql_proxy_bind_address=0.0.0.0:<port>

  • ● YugabyteDB Anywhere (YBA): via YSQL communication settings (for example, ysqlServerRpcPort)

πŸ”Œ What changes when YCM is enabled

With YSQL Connection Manager (Odyssey) enabled:

  • ● By default, YCM takes over port 5433 for client connections

  • ● The PostgreSQL backend is assigned a random free port unless explicitly set

That’s why you might see PostgreSQL listening on 6433, 6543, or something else entirely.

Explicit configuration (recommended)

Set both ports intentionally:

Purpose Flag
YCM (client-facing) ysql_conn_mgr_port
PostgreSQL backend ysql_port (or pgsql_proxy_bind_address)
πŸ’‘ Port configuration callout (important!)
πŸ’‘ Important:
These port numbers are defaults, not requirements.

You can set the YCM port and the PostgreSQL backend port to any values you want; they just must be different.

YSQL Connection Manager (Odyssey) and PostgreSQL are separate processes, and they cannot bind to the same TCP port.
🧭 Final takeaway
  • ● Connection success β‰  connection pooling

  • ● YCM (Odyssey) and PostgreSQL are separate processes

  • ● Defaults are conventions, not rules

  • ● Always verify with:

				
					SHOW yb_is_client_ysqlconnmgr;
				
			
  • ● And when in doubt, confirm the actual ports in use with the one-liner above

Have Fun!

Kicking off 2026 with our first YugabyteDB Tip! Wishing everyone a happy and prosperous New Year πŸŽ‰ I'm looking forward to sharing many more YugabyteDB tips throughout the year.