数据库迁移
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 迁移前用探测表测试平台支持