fix(api): add users pk column compatibility at startup

This commit is contained in:
chengkai3
2026-05-01 08:54:24 +08:00
parent c32ae9d781
commit fb1c3c8022
3 changed files with 58 additions and 1 deletions
+20
View File
@@ -0,0 +1,20 @@
## Work Log - 修复 API 启动阶段 users 主键列兼容问题(2026-05-01
- 背景:
- 启动报错 `psycopg.errors.UndefinedColumn: column users.user_id does not exist`,触发点在 `seed_defaults -> _seed_permissions` 的关系加载 SQL。
- 当前 ORM 与外键约定统一使用 `users.user_id`,但历史库可能残留 `users.id` 主键列命名。
- 本次改动:
- `api/app/core/database.py`
- 新增 `_ensure_user_pk_column_compatibility()`
-`init_db()` 执行 `Base.metadata.create_all()` 前,针对 PostgreSQL 做一次兼容检查:
-`users` 表存在,且检测到仅有 `id` 而没有 `user_id`,自动执行:`ALTER TABLE users RENAME COLUMN id TO user_id`
- 其余情况不改动(已是 `user_id` 或两者都不存在时直接跳过)。
- 验证:
-`fquiz-api` 容器内执行 `init_db()``init_db_ok`
-`fquiz-api` 容器内执行查询,确认当前数据库 `users` 列包含 `user_id`
- 风险与影响:
- 影响范围:仅 PostgreSQL 且仅触发于“存在 `users.id` 且缺少 `users.user_id`”的历史库。
- 该变更属于启动期一次性 DDL 兼容动作;对已规范为 `users.user_id` 的库无行为变化。