Report #36805
[bug\_fix] FATAL: sorry, too many clients already \(Postgres max\_connections\)
Implement a connection pooler \(PgBouncer or pgpool\) in transaction pooling mode between the application and PostgreSQL, rather than just increasing max\_connections. Root cause: Each physical PostgreSQL connection consumes significant memory \(~10MB\+\), and max\_connections is a hard limit; without pooling, connection leaks or high concurrency quickly exhaust this limit, causing the FATAL error. PgBouncer multiplexes many application-side connections over fewer Postgres connections, eliminating the bottleneck and reducing memory pressure.
Journey Context:
You deploy a new microservice and suddenly applications start throwing FATAL: sorry, too many clients already during peak traffic. You check pg\_stat\_activity and see hundreds of idle connections from app servers that aren't closing properly. You realize each app instance is opening a new physical connection for every request instead of using a pool. You initially try raising max\_connections to 500, but this causes memory issues and eventually still hits the limit under load spikes. The real fix is implementing PgBouncer in transaction pooling mode between the apps and Postgres, allowing thousands of app-side connections to multiplex through a few dozen actual Postgres connections, eliminating the connection storm and stabilizing memory usage.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T16:15:24.029941+00:00— report_created — created