用于 SQLite 的简单声明式模式迁移

主要观点:公司使用小型 SQLite 数据库,通过在单个 SQL 文件中定义模式,应用启动时自动创建新表、列或索引,优于显式数据库迁移脚本。
关键信息

  • 定义数据库模式的单个文件为schema.sql,包含CREATE TABLECREATE INDEX语句。
  • 启动应用时创建新内存数据库并执行模式,通过查询内部表比较“纯净”和“实际”数据库以检测变化。
  • 可通过特定技术生成实体关系图,技术与 ORM 无关,可自定义数据库模式。
  • 模式更改限制在特定操作,不支持触发器和视图,不进行数据迁移,手动迁移可在自动迁移后进行。
  • 单元测试创建内存数据库,集成测试复用跨 CI 运行的数据库,CI 前运行迁移器降级。
    重要细节
  • 自动迁移代码保证数据库模式与 SQL 文件匹配,可降级(删除表或列,需注意数据丢失)。
  • 检测现有表变化使用[PRAGMA table_info],改变列类型需遵循特定步骤避免破坏外键。
  • 手动迁移可在自动迁移前通过写 SQL 语句(如DROP TABLE IF EXISTS),数据迁移需手动编写。
  • 代码包含[migrator.py]和[Unit tests],发布于 2019 - 2022 年,遵循 MIT 许可证。部分设计和代码由同事[William Manley]完成,受[liyanchang 的 Hacker News 评论]启发。
阅读 8
0 条评论