Glossary

Connection pooler (Supavisor)

A connection pooler multiplexes many client connections onto a few Postgres connections. Supabase's pooler, Supavisor, also provides an IPv4-reachable host for the database.

A connection pooler sits between your clients and Postgres and reuses a small set of database connections to serve a much larger number of client connections. Postgres connections are expensive (each is a process with its own memory), so without pooling a busy or serverless app quickly exhausts them and hits too many connections.

Supabase's pooler is Supavisor. It matters during migration for two reasons:

  • It is reachable over IPv4. The direct database host, db.<ref>.supabase.co, resolves to an IPv6-only address. Many CI runners, serverless platforms, and Edge runtimes are IPv4-only and simply can't reach it. The pooler host, <tenant>-<region>.pooler.supabase.com, is IPv4-compatible.
  • It offers two modes. Transaction mode (port 6543) assigns a connection for the duration of a single transaction — ideal for short-lived and serverless workloads, but no session-level features or prepared statements. Session mode (port 5432) keeps a connection for the whole client session and supports prepared statements, LISTEN/NOTIFY, and set commands.
# Transaction pooler (serverless / migrations)
postgresql://postgres.<ref>:<pwd>@<tenant>-<region>.pooler.supabase.com:6543/postgres

# Session pooler (persistent sessions)
postgresql://postgres.<ref>:<pwd>@<tenant>-<region>.pooler.supabase.com:5432/postgres

Note the username on the pooler is postgres.<project-ref>, not just postgres. You can generate a correct string with the connection string builder.

Related terms