Install PgBouncer on a host that can reach your Postgres server: `apt install pgbouncer` or pull the Docker image `bitnami/pgbouncer`.
Configure `pgbouncer.ini`: set `[databases]` with your target DB alias and DSN, `pool_mode = transaction`, `max_client_conn = 1000`, and `default_pool_size = 20`.
Configure `userlist.txt` with Postgres usernames and their md5-hashed passwords (format: `"username" "md5<hash>"`); point `auth_file` in `pgbouncer.ini` to this file.
Start PgBouncer and connect your application to the PgBouncer listen port (default 6432) instead of the Postgres port (5432).
Monitor pool saturation with `psql -h 127.0.0.1 -p 6432 -U pgbouncer pgbouncer -c 'SHOW POOLS;'` — watch `cl_waiting` for queued clients.
Known gotchas
In `transaction` pool mode, session-level features (`SET`, advisory locks, `LISTEN/NOTIFY`, prepared statements pinned to a session) do not work reliably — use `session` mode if you need them.
PgBouncer does not support SSL termination to the client in all versions; configure `client_tls_sslmode` carefully and verify your version supports the TLS config you need.
Increasing `default_pool_size` beyond Postgres's `max_connections` budget causes connection errors on the backend — ensure the pool size times the number of PgBouncer instances stays under `max_connections`.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp