问题域/PD-110

数据库迁移

Database Migration

版本化 schema 演进、迁移管理、数据兼容性保障

子问题

1.版本化迁移注册与执行

2.事务保护迁移原子性

3.向后兼容 rollback

4.FTS 索引迁移

5.双迁移系统版本号冲突与共存

6.SQLite 约束修改的四步表重建

7.FTS5 虚拟表的平台兼容性探测

8.迁移崩溃后临时表残留清理

各项目的解法1 solutions

Signals

横向对比

维度claude-mem
迁移注册方式MigrationRunner 方法链,每个迁移是一个私有方法,runAllMigrations() 按序调用
幂等策略双重检测:schema_versions 版本号 + PRAGMA table_info 实际列状态
约束修改四步表重建:CREATE _new → INSERT SELECT → DROP old → RENAME
版本追踪schema_versions 表 + INSERT OR IGNORE 防重复
平台适配FTS5 探测表测试可用性,不可用时优雅跳过
崩溃恢复迁移前 DROP TABLE IF EXISTS _new 清理残留临时表

最佳实践

1.每个迁移包含 up/down 方法,用 schema_versions 表追踪状态

2.PRAGMA table_info 检测实际列状态,不仅依赖版本号

3.表重建前 DROP TABLE IF EXISTS _new 清理崩溃残留

4.FK 约束修改需先 PRAGMA foreign_keys = OFF 再事务重建

5.FTS5 迁移前用探测表测试平台支持