数据库迁移脚本和带有时间戳的版本控制

Posted

技术标签:

【中文标题】数据库迁移脚本和带有时间戳的版本控制【英文标题】:Database migration scripts and versioning with timestamps 【发布时间】:2014-07-16 18:41:24 【问题描述】:

我们正在尝试使用 Flyway (http://flywaydb.org/) 来应用我们的数据库迁移脚本。

大多数人都使用这样的时间戳版本:20140527112103__alter_some_table.sql 从 bash 脚本或 maven/ant 任务生成这些文件。

如果开发人员在周一生成文件,在某项任务上工作了几天,然后提交迁移脚本,这个问题会怎样呢?现在它将出现故障,并且可能与同时提交的其他脚本发生冲突。

在提交期间有什么方法可以在文件名中添加时间戳?

【问题讨论】:

【参考方案1】:

您可以打开 outOfOrder 模式,然后一切都会好起来的。除非开发人员 A 在开发人员 B 同时删除的列上创建索引。但是开发人员 A 应该提取最新的更改并测试迁移。

【讨论】:

【参考方案2】:

您所要做的就是在提交之前立即重命名它,您应该没问题。

【讨论】:

这不会破坏我的开发数据库吗?致力于迁移 20140528113435_adding_a_table.sql,我已将其应用于我的本地开发数据库。在提交之前将其重命名为 20140601113435_adding_a_table.sql。 next flyway:migrate 会再次运行,导致重复表错误。

以上是关于数据库迁移脚本和带有时间戳的版本控制的主要内容,如果未能解决你的问题,请参考以下文章

核心数据模型版本控制和数据迁移

SQL 迁移脚本 - 插入到带有输出 ID 的选择中

带有转储数据和迁移的 Django 备份策略

Entity Framework 4 的数据库迁移

CoreData 版本控制和阻塞轻量级迁移

带有更新的预填充数据库的 Android Room 迁移