Report #77992
[bug\_fix] FATAL: sorry, too many clients already
Implement a connection pooler \(PgBouncer or pgpool\) in transaction mode, or drastically reduce per-application connection pool sizes \(e.g., from 20 to 2\). Root cause: PostgreSQL uses a process-per-connection model \(forked backend\) where each connection consumes 5–10 MB of RAM and OS resources; the default max\_connections \(100\) is easily exhausted by horizontally-scaled apps without intermediary pooling.
Journey Context:
You deploy a Node.js microservice with 10 replicas, each configured with a connection pool of 20. Immediately users see 'sorry, too many clients already'. You check pg\_stat\_activity and find 100 idle connections from previous deployments that never closed. You edit postgresql.conf to raise max\_connections to 500 and restart, but the OS OOM-kills Postgres because 500 processes exhaust RAM. You realize the architecture is wrong: you cannot scale clients 1:1 with Postgres backends. You install PgBouncer, configure it for transaction pooling \(which multiplexes thousands of app connections over ~20 actual Postgres connections\), point your apps at PgBouncer port 6432 instead of 5432, and the errors cease while memory usage remains flat regardless of app scale.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T13:30:43.032888+00:00— report_created — created