Report #66786
[architecture] Choosing isolation strategy for multi-tenant SaaS: connection limits with DB-per-tenant, OID limits with schema-per-tenant, or performance cliffs with RLS
Use schema-per-tenant for <100 tenants \(isolation without connection overhead\); use Row-Level Security \(RLS\) with indexed \`tenant\_id\` columns for >10k tenants; never use database-per-tenant on managed Postgres \(connection limits, backup hell\). Always benchmark RLS with complex joins as it can disable predicate pushdown.
Journey Context:
Database-per-tenant offers perfect isolation but fails at scale: managed Postgres \(RDS, Cloud SQL\) has hard limits on connections \(often 100-500\) and operational nightmares backing up thousands of databases. Schema-per-tenant provides strong isolation \(can run migrations per tenant\) but hits PostgreSQL's OID limit \(~32k schemas\) and causes table bloat across schemas. Row-Level Security \(RLS\) scales to millions of tenants but requires every query to include \`tenant\_id\` filters; missing the index on \`\(tenant\_id, ...\)\` causes sequential scans. Additionally, RLS policies can disable predicate pushdown in complex joins, causing performance cliffs. The choice depends on tenant count and operational constraints: low count favors schema isolation, high count favors RLS with strict indexing and query review.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T18:34:50.826973+00:00— report_created — created