← Dev Notes

Optimizando PostgreSQL para SaaS Multi-Tenant

PostgreSQLSaaSBackendPerformance

El Reto

Cuando construyes un SaaS multi-tenant, uno de los primeros cuellos de botella que encuentras es la base de datos. PostgreSQL es una elección sólida, pero requiere configuración intencional para manejar múltiples inquilinos sin degradar el rendimiento.

Estrategia de Particionamiento

En lugar de crear una base de datos por tenant (costoso y difícil de mantener), optamos por Row-Level Security (RLS):

-- Política de seguridad a nivel de fila
ALTER TABLE orders ENABLE ROW LEVEL SECURITY;

CREATE POLICY tenant_isolation ON orders
  USING (tenant_id = current_setting('app.current_tenant')::uuid);

Connection Pooling con PgBouncer

Para manejar la concurrencia, PgBouncer en modo transaction reduce drásticamente el número de conexiones activas:

[pgbouncer]
pool_mode = transaction
max_client_conn = 1000
default_pool_size = 25

Resultado

Con esta combinación, logramos servir +500 tenants concurrentes con tiempos de respuesta p95 por debajo de 50ms.


Este tipo de decisiones arquitectónicas son las que aplicamos diariamente en Gorigami S.A.S.