Cómo funciona PgBouncer: la guía completa de un proxy de conexiones para Postgres

Fuentes: How PgBouncer Works

PgBouncer es un proxy ligero, escrito en C y basado en libevent, que se sitúa entre las aplicaciones y un servidor Postgres para multiplexar múltiples conexiones de cliente sobre un conjunto mucho menor de backends reales. Su propósito es resolver un problema estructural de Postgres: cada conexión es un proceso forked que consume entre 1,5 y 15 MB de memoria según la carga, además de una ranura en el procarray compartido y un coste de establecimiento de varios milisegundos que puede alcanzar los 100 ms con TLS entre regiones. En la práctica, la mayoría de conexiones de aplicación están inactivas más del 95% del tiempo, por lo que un pooler reasigna los recursos del servidor a las consultas activas.

El artículo describe los tres modos de pooling —session, transaction y statement— y explica qué se rompe en cada uno. En modo transaction, las variables SET, los prepared statements y los advisory locks no persisten entre transacciones, lo que provoca errores sutiles cuando se migra una aplicación desde conexión directa. También cubre la operativa en producción: dimensionamiento del pool en función de los núcleos de CPU, autenticación mediante SCRAM o auth_query para no duplicar contraseñas, monitorización de métricas clave y los errores frecuentes al desplegar el servicio. La guía se basa en PgBouncer 1.25.1 y está pensada para ingenieros que ya usan Postgres en producción.