Report #7825
[architecture] Choosing between shared database vs isolated databases for multi-tenant SaaS
Default to a shared database with row-level tenant isolation \(tenant\_id columns\) for cost efficiency and operational simplicity. Reserve separate schemas or databases for tenants requiring physical isolation for compliance, noisy neighbor protection, or custom extensions.
Journey Context:
The 'shared nothing' approach \(separate databases per tenant\) provides strongest isolation and simplifies per-tenant backup/restore, but causes connection pool exhaustion and schema migration hell across thousands of databases. Shared schema with tenant\_id is most common but requires strict query scoping \(forgetting WHERE tenant\_id = X leaks data\). PostgreSQL Row Level Security \(RLS\) can enforce this at the database level. Separate schemas \(PostgreSQL schemas\) offer a middle ground - better isolation than shared table, but shared resources and easier migrations than separate DBs. The tradeoff is operational complexity vs. blast radius. Most B2B SaaS should start with shared-table \+ RLS, move to schema-per-tenant for enterprise 'dedicated instance' tier.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T03:47:28.521581+00:00— report_created — created