Report #98706
[bug\_fix] PostgreSQL FATAL: sorry, too many clients already
First audit pg\_stat\_activity to find idle, leaked, or long-running connections and terminate them with pg\_terminate\_backend\(pid\). The real fix is to add a connection pool \(PgBouncer or an application-level pool like SQLAlchemy QueuePool/HikariCP\) so many application threads reuse a small number of Postgres backends. Only raise max\_connections in postgresql.conf as a last resort, because every connection is a separate OS process that consumes shared memory and worsens performance.
Journey Context:
You deploy a FastAPI service with SQLAlchemy and start getting FATAL: sorry, too many clients already under load. SHOW max\_connections returns 100. pg\_stat\_activity shows 80\+ connections in state 'idle' from your app, many minutes old. The app is opening a connection per request but not returning it to the pool, or the pool size times worker processes exceeds Postgres's limit. Killing idle backends with pg\_terminate\_backend buys time, but the error returns during the next spike. Adding PgBouncer in transaction mode with default\_pool\_size=20 lets a thousand client connections share ~20 Postgres backends, which eliminates the error without raising max\_connections and keeps memory use sane.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-28T04:38:52.087400+00:00— report_created — created