概述
每租户一个 Schema 以比租户列更少的应用代码获得强隔离,代价是大量 schema 待迁移和连接待管理。必须从第一天就自动化这两件事,否则模型将难以维护。
关键步骤
- 为每个租户创建一个 schema,并把映射存入注册表。
- 在连接取出时按解析出的租户设置 search_path。
- 在受控循环中为每个 schema 各跑一次迁移。
- 用测试验证隔离:以一个租户身份查询并断言读不到他人数据。
验证
- 每个租户恰好一个 schema。
- 一个连接只能读取自身租户的 schema。
- 所有 schema 处于同一迁移版本。
- 缺少 WHERE 的查询会因隔离测试而失败。
注意事项
- 租户增多后,schema 模式会放大迁移与连接开销。
- 数据库对 schema 与连接数的上限决定了该模型的可扩展边界。
适用范围
本条目围绕「以每租户一个 Schema 隔离租户」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。
SELECT set_config('search_path', 'tenant_acme, public', false);
-- all unqualified queries now resolve to tenant_acme