Skip to content
All terms
Postgres

Connection Pooling

Connection pooling sits between your application and Postgres. The pooler holds a small set of upstream connections and multiplexes many client connections over them. Without a pooler, every serverless request would open a fresh Postgres connection - expensive (~10MB per connection) and quickly exhausts the default max_connections limit of 100.

Three modes: session (one client gets one upstream for the whole connection), transaction (one upstream per transaction; the scaling win), and statement (one per statement, almost nobody uses).

2026 popular poolers: pgBouncer (rock-solid C, single-threaded), Supavisor (Elixir, multi-tenant, Supabase's default), PgCat (Rust, multi-threaded, supports read replica routing), RDS Proxy (AWS-bundled). Pick transaction mode for serverless; watch out for prepared-statement compatibility in your driver.

Read further