Multi-Tenancy en SaaS B2B: Schema vs RLS en PostgreSQL
Elegir multi-tenancy mal el día 1 te cuesta 6 meses de refactor el día 400. Es una de esas decisiones arquitectónicas que parecen inocuas al principio — "solo agregamos un tenantId a todas las tablas" — y que 18 meses después se revelan como la razón por la cual tu SaaS no puede cumplir un requisito de aislamiento de datos de un cliente grande, no puede migrar tenants entre regiones, o no puede ofrecer self-hosted a un cliente que lo exige.
Para un SaaS B2B que arranca en 2026, las dos arquitecturas serias son schema-per-tenant y Row-Level Security (RLS). La tercera opción, "base de datos separada por tenant", se reserva para clientes enterprise con contratos específicos y no es el default. Elegir entre schema-per-tenant y RLS no es técnica pura: es también una decisión de negocio sobre cuántos tenants vas a tener, qué tamaño, y qué compromisos de aislamiento necesitás firmar.
Este post compara ambas con código funcional, benchmarks reales y los criterios de decisión que usamos en MeepLab cuando un cliente nos pregunta "¿cómo hacemos multi-tenancy?". Todo con PostgreSQL puro, Prisma y Express — cero dependencias SaaS de pago ni ORM propietario.
En este artículo aprenderás:
- Los tres modelos de multi-tenancy y cuándo descartás cada uno
- Schema-per-tenant explicado: cómo implementarlo en PostgreSQL, fuerzas y límites operacionales
- Row-Level Security con PostgreSQL:
CREATE POLICY, middleware Express y cómo funciona internamente - Benchmark real de ambos patrones con 100 tenants y 10M filas
- Criterios de decisión: 8 preguntas que respondés antes de elegir
- Cuándo migrar de un modelo al otro y cuánto cuesta

