15 lines
1.7 KiB
Markdown
15 lines
1.7 KiB
Markdown
|
|
# 员工与组织残留全局唯一索引阻断多租户复用
|
|||
|
|
|
|||
|
|
日期: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 锁,须在用户确认维护窗口后应用。
|