If you need read/write splitting and failover as well as pooling, look at Pgpool-II. If a single-threaded PgBouncer process is the bottleneck, Odyssey is a multi-threaded pooler with per-user rules. For one pooler serving many separate PostgreSQL databases, Supavisor is multi-tenant by design. If you would rather not run a pooler at all, Amazon RDS Proxy on AWS and Cloud SQL Managed Connection Pooling on Google Cloud (Enterprise Plus edition) are managed options. Many teams keep PgBouncer and add HAProxy or Patroni for routing; that is often simpler than switching.
PgBouncer is a small, ISC-licensed connection pooler for PostgreSQL. Clients connect to it as if it were PostgreSQL, and it shares a few server connections among many clients in session, transaction or statement pooling mode. Version 1.26.1 (14 October 2026) is current, and several managed PostgreSQL services build their pooling on it.
PgBouncer is deliberately narrow. These are the documented reasons teams look at something else:
- One CPU core per process. The documentation describes PgBouncer as single-threaded; using more cores means running several processes with
so_reuseportand peering them. - No query routing or failover. It does not split reads from writes or detect which host is the primary, so high availability usually needs Patroni, DNS, a virtual IP or HAProxy next to it.
- Session features in transaction mode.
SET,LISTEN, session advisory locks and SQL-levelPREPAREdo not survive across transactions. Protocol-level prepared statements have worked since 1.21, so this matters less than it used to. - Upgrades. Version 1.26.0 removed online restart (
-R), so upgrades need a planned approach. - Operations. You install, patch and keep it highly available yourself; on AWS or Google Cloud a managed pooler can take that work away (editorial).
Planned head-to-head pages: PgBouncer vs Pgpool-II, Odyssey vs PgBouncer and Amazon RDS Proxy vs PgBouncer. For MySQL proxies, see ProxySQL alternatives.
Quick picks
Routes writes to the primary, balances reads across replicas and handles failover, under a BSD-style licence.
Multi-threaded workers share global pools, with per database and user rules.
Apache 2.0, multi-tenant pooler written in Elixir that runs Supabase's shared pooler.
Managed pooling with IAM authentication and faster Multi-AZ failover, billed per vCPU-hour.
Built into Cloud SQL for PostgreSQL Enterprise Plus, with transaction and session modes.
How we chose
We considered Pgpool-II, Odyssey, Supavisor, PgCat, Amazon RDS Proxy, Cloud SQL Managed Connection Pooling, HAProxy, the Cloud SQL Auth Proxy and Citus. To be included, a product had to pool PostgreSQL connections, be actively developed or sold in November 2026, and document its pooling behaviour on an official page.
Left out: HAProxy is a TCP load balancer that maps one client connection to one server connection, so it complements a pooler rather than replacing it; the Cloud SQL Auth Proxy handles authentication and TLS, and Google states it is not a pooler; Citus is a sharding extension inside PostgreSQL. PgCat, an MIT-licensed Rust pooler with load balancing and failover, is not listed because the GitHub API showed no pushes to its repository since 27 February 2025; check its status before relying on it. Pooling built into managed services (for example Azure Database for PostgreSQL flexible server and Neon) is PgBouncer itself, so it is not a separate alternative.
The order is not a ranking. Self-hosted poolers come first, then managed services.
At a glance
| Option | Type | Pooling modes | Read/write routing | Runs on | Main trade-off |
|---|---|---|---|---|---|
| Pgpool-II | Self-hosted middleware (BSD-style) | Per-process connection cache | Yes, SQL-aware; plus failover | Linux | Many settings; fewer connections saved than transaction pooling |
| Odyssey | Self-hosted pooler (BSD 3-Clause) | Session, transaction | Host choice by target_session_attrs | Linux x86 and x86_64 | Thinner documentation and packaging |
| Supavisor | Self-hosted pooler (Apache 2.0) | Transaction, session, native | No; read replica balancing listed as future work | Elixir/Erlang cluster | Heavier to run than a single binary |
| Amazon RDS Proxy | Managed AWS service | Multiplexing per transaction, with pinning | Read-only endpoints for Aurora and Multi-AZ DB clusters | AWS (RDS and Aurora) | Cost per vCPU-hour; about 5 ms added latency |
| Cloud SQL Managed Connection Pooling | Managed Google Cloud feature | Transaction (default), session | No | Cloud SQL for PostgreSQL, Enterprise Plus | Enterprise Plus only; enabling restarts the instance |
Pgpool-II
Pgpool-II sits between clients and one or more PostgreSQL servers and does more than pool. In streaming_replication mode, which its documentation recommends, PostgreSQL replicates and Pgpool-II sends writes to the primary and balances reads across standbys, per session or per statement. It can keep reads on the primary when replicas lag (delay_threshold), performs automatic failover and online recovery, and uses a watchdog with a virtual IP for its own high availability.
Its pooling is a connection cache per child process rather than transaction pooling, so it saves fewer server connections than PgBouncer in transaction mode; some teams run both. Releases 4.7.3 and four older branches were published on 29 September 2026. See PgBouncer vs Pgpool-II.
- Many parameters and modes; a misconfiguration can send writes or stale reads to the wrong server.
- No transaction-level pooling is documented.
- The watchdog needs at least three Pgpool-II nodes, and GSSAPI authentication is not supported.
Odyssey
Odyssey is a BSD 3-Clause pooler from Yandex, maintained by the Yandex Cloud managed databases team. Worker threads handle authentication and proxying while sharing global server pools, so one process can use several CPU cores. Pools are defined per database and user rule, each with its own pool mode (session or transaction), authentication method and limits.
In transaction mode it supports prepared statements per rule (pool_reserve_prepared_statement) and can roll back work left by a client that disconnects mid-transaction. Host balancing uses target_session_attrs and prefers the local host and availability zone. The repository is active: v1.5.2 was released on 13 September 2026 and 1.6.0-rc1 on 5 October 2026. See Odyssey vs PgBouncer.
- Linux on x86 or x86_64 only, according to the README.
- Documentation is less complete than PgBouncer's, with some ambiguous defaults.
- No SQL parsing, so read/write splitting is by host attributes per rule, not per statement.
Supavisor
Supavisor is an Apache 2.0 connection pooler from Supabase, written in Elixir, which describes itself as scalable, cloud-native and multi-tenant: one Supavisor cluster can pool connections for many different PostgreSQL instances, configured as tenants. Its documentation lists three pool modes per user: transaction, session and native (a direct pass-through, which it says is typically needed for migrations). It exposes Prometheus metrics, and v2.10.0 was published on 6 November 2026.
Supavisor runs the shared pooler of the Supabase platform. Supabase's own documentation says that pooler does not support prepared statements in transaction mode, and that its dedicated pooler on paid plans is PgBouncer, which does. The README lists query load balancing across read replicas as future work. See Supabase alternatives if you are choosing a platform rather than a pooler.
- Running an Elixir/Erlang cluster is a bigger operational step than a single PgBouncer binary (editorial).
- Supabase documents no prepared statement support in transaction mode on its Supavisor-based shared pooler.
- No read replica load balancing yet, per the README.
Amazon RDS Proxy
RDS Proxy is a managed proxy for RDS and Aurora. By default it reuses a database connection after each transaction (AWS calls this multiplexing) and falls back to pinning a session to one connection when sharing is unsafe. AWS says it can cut failover time for RDS Multi-AZ DB instances by up to 66% while keeping application connections open, and it supports IAM authentication with credentials in Secrets Manager. It supports PostgreSQL, MySQL, MariaDB and SQL Server engines.
It is billed per vCPU-hour of the instance behind it (0.015 USD in US East (N. Virginia) on 8 October 2026). AWS documents an average of about 5 ms of added latency, a same-VPC requirement, and that for RDS instances a proxy can target only the writer. See Amazon RDS Proxy explained and Amazon RDS Proxy vs PgBouncer.
- AWS only, inside the database's VPC, and not publicly accessible.
- Sessions that change state are pinned and lose the benefit of multiplexing; any statement over 16 KB pins the session.
- For PostgreSQL it does not support cancelling a running query with a CancelRequest.
Cloud SQL Managed Connection Pooling
Managed Connection Pooling puts a pool cluster between clients and a Cloud SQL for PostgreSQL instance, aimed at connection spikes from short-lived clients such as microservices and Cloud Run. It offers transaction mode (the default, which Google recommends for short-lived connections) and session mode, and clients reach it on port 6432 directly or on port 3307 through the Cloud SQL Auth Proxy (version 2.15.2 or later), which also allows automatic IAM database authentication.
The documentation lists the same kind of transaction-mode limits as PgBouncer: no SET/RESET, LISTEN, PREPARE/DEALLOCATE or session-level advisory locks. The page did not state whether the feature is GA or quote a separate price, so check the Cloud SQL pricing page.
- Available only on the Cloud SQL Enterprise Plus edition.
- Enabling it on an existing instance restarts the database, and the instance must use the newer Cloud SQL network architecture.
- Google Cloud only.
When to stay with PgBouncer
Stay with PgBouncer if your only problem is too many connections. It is small, widely packaged, free, and with protocol-level prepared statements in transaction mode most drivers now work with it. If one process is not enough, several PgBouncer processes on one host with so_reuseport are a documented option before you change tools, and HAProxy or Patroni can handle primary routing beside it.
Switching makes most sense when you need SQL-aware read/write splitting and failover in the pooling layer (Pgpool-II), many cores in one pooler process (Odyssey), one pooler for many tenant databases (Supavisor), or no pooler to operate at all (RDS Proxy, Cloud SQL Managed Connection Pooling). Test your application's session features against the new pooler's transaction mode before cutting over.
Frequently asked questions
What is the main alternative to PgBouncer?
It depends on what you need. Pgpool-II adds read/write splitting and failover; Odyssey is a multi-threaded pooler; Supavisor is a multi-tenant pooler; Amazon RDS Proxy and Cloud SQL Managed Connection Pooling are managed services on AWS and Google Cloud.
Is HAProxy an alternative to PgBouncer?
Not for pooling. HAProxy forwards each client connection to a server connection, so it does not reduce the number of PostgreSQL connections. It is often used next to PgBouncer to route clients to the current primary.
Which PgBouncer alternative supports read/write splitting?
Pgpool-II parses statements and sends writes to the primary and reads to replicas. Odyssey can send users or databases to read-only or read-write hosts with target_session_attrs, and RDS Proxy offers read-only endpoints for Aurora and Multi-AZ DB clusters.
Is PgCat still maintained?
We could not confirm active development: on 7 November 2026 the GitHub API showed the postgresml/pgcat repository was not archived but had no pushes since 27 February 2025. For that reason it is not recommended on this page.
Do managed PostgreSQL services include a pooler?
Several do. Azure Database for PostgreSQL flexible server and Neon include PgBouncer, Supabase offers a Supavisor shared pooler and a PgBouncer dedicated pooler, AWS sells RDS Proxy, and Cloud SQL Enterprise Plus has Managed Connection Pooling.
Sources
- PgBouncer features and pooling modes
- PgBouncer configuration reference
- PgBouncer changelog
- Pgpool-II documentation: What is Pgpool-II
- Pgpool-II documentation: load balancing
- Odyssey GitHub repository
- Odyssey documentation: pooling
- Supavisor GitHub repository
- Supavisor documentation: pool modes
- Supabase: connecting to Postgres
- Amazon RDS User Guide: Amazon RDS Proxy
- Amazon RDS Proxy pricing
- Cloud SQL Managed Connection Pooling
- PgCat GitHub repository
Checked November 2026.
How we research these guides: our editorial method.