tamakyi
62edf88029
feat(db): 版本化数据库迁移,改列名/删列不再静默丢数据
GORM 的 AutoMigrate 只会加表/加列/加索引,从不改列名/删列/改约束。此前这类
破坏性变更靠「HasColumn 判断 + 幂等补丁」硬撑,既没有账本记录「跑过什么」,
也把 5 个一次性回填(backfillAnsweredAt / backfillFeatureControls /
reconcileLegacyChatEnabled / normalizeChatQuota / normalizeHarassmentSetting)
留成了每次启动都全表扫一遍。
新增 schema_migrations 账本表 + runMigrations:
- 迁移按版本号升序执行,每个迁移在事务里「跑 up + 记版本」,任一失败阻断启动
- 那 5 个幂等补丁收编为 v1~v5,收编后只跑一次,之后启动直接跳过
- AutoMigrate 仍负责声明式的加表/加列/加索引,版本迁移负责它做不了的破坏性变更
与一次性回填,两者分工互不替代
测试覆盖:幂等(跑两遍不重复)、失败阻断后续、清单严格升序。实测真实库首次
启动建账本 + v1~v5 落库,二次重启账本不变。
2026-10-29 19:27:03 +08:00
..
2026-10-29 16:28:23 +08:00
2026-09-15 11:06:09 +08:00
2026-10-29 18:25:53 +08:00
2026-10-27 12:37:40 +08:00
2026-10-29 18:25:53 +08:00
2026-10-29 19:27:03 +08:00
2026-09-10 10:56:27 +08:00
2026-10-27 12:37:40 +08:00
2026-10-29 18:25:53 +08:00
2026-10-16 09:39:30 +08:00
2026-10-29 18:52:38 +08:00
2026-10-23 10:53:03 +08:00
2026-10-29 18:52:38 +08:00
2026-10-23 12:58:48 +08:00
2026-10-29 15:53:32 +08:00
2026-10-25 09:27:57 +08:00
2026-10-16 09:39:30 +08:00
2026-10-27 12:37:40 +08:00
2026-10-22 16:05:37 +08:00
2026-09-10 10:56:27 +08:00