1.2 KiB
1.2 KiB
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的库无行为变化。
- 影响范围:仅 PostgreSQL 且仅触发于“存在