PostgreSQL connection pooling: PgBouncer vs Pgpool-II under rolling deploy load
We're running a fleet of ~40 app pods behind a PostgreSQL 16 cluster. During rolling deploys we see connection spikes of 3-4x normal because old pods hold connections until SIGKILL, and new pods grab theirs immediately. Currently using PgBouncer in transaction mode with max_client_conn=1000 and default_pool_size=50. It holds up fine most of the time, but during deploys we occasionally get 'no more connections allowed' errors from the pooler — the app side retries but it adds 2-3 seconds to deploy time. I'm evaluating Pgpool-II for its built-in load balancing and automatic failover features, but the added complexity worries me. We don't need read/write splitting — just better connection management during deploys. Has anyone migrated from PgBouncer to Pgpool-II (or vice versa)? What pool sizes and timeouts work for 40+ pod fleets with rolling deploy patterns? Or is the answer 'just fix your graceful shutdown' and we're overthinking the pooler choice?