# 员工与组织残留全局唯一索引阻断多租户复用

日期：2026-07-18
文档路径：document/development/2026-07-18/dev-logs/bugs/tenant-identity-global-unique-indexes.md

## 修复记录

- 15:54：记录数据库迁移修复：员工编号、员工邮箱和组织编码仍保留单列全局唯一索引，第二个企业无法使用相同企业内部标识。
  - Git 提交检查：`git fetch --all --prune` 成功；upstream `origin/main` 无新提交；本地 ahead 19 条，最新为 `07241b46 fix(docker): manage local postgres in default compose`、`787bc3a4 feat(platform): close AI expense value loop`、`242d68c3 feat(approval): add task workflow and waiver decisions`，另有 16 条。
  - 原因：历史迁移已增加正确的租户复合唯一约束，但三个旧单列唯一索引未被替换，PostgreSQL 仍按全局范围拒绝重复值。
  - 修改：新增 Alembic `20260718_0029`，在 PostgreSQL 中校验复合唯一约束和现有索引形态后，将三个同名单列唯一索引替换为普通查询索引；降级前检查跨租户重复并在无法安全恢复全局唯一时拒绝降级。
  - 操作：更新迁移前置检查和迁移测试；只读核验当前数据库仍位于 `20260717_0028`，未执行 live DDL、数据写入或主容器重启。
  - 验证：容器内迁移测试 `167 passed, 1 skipped`，Ruff 通过，Alembic HEAD 为 `20260718_0029`；跳过项仅因未配置专用一次性 PostgreSQL 迁移测试库，未使用当前业务库替代。
  - 影响：代码层已具备租户内唯一、跨租户可复用的索引迁移；正式生效会短暂获取索引 DDL 锁，须在用户确认维护窗口后应用。
