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 (port5432) keeps a connection for the whole client session and supports prepared statements,LISTEN/NOTIFY, andsetcommands.
# 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