我是一个包含多个模块(大约30个罐子)的大型java项目的一部分,并且对使用flyway管理数据库迁移感兴趣。
作为公司政策的一部分,与每个项目相关的迁移脚本存在于每个模块中,并且在迁移时聚合形成一个来自发布的大型sql脚本 - >发布。 (例如,构建234 - > 298)。另外值得注意的是,我们目前使用的是CVS(强制性的-_- face),并且正在将git视为替代品:)。
由于Git的分布式特性,考虑用于命名flyway迁移脚本的顺序版本号是违反直觉的。让我离题了......
A
分支到其功能分支B
A
的单独用户分支到他们自己的功能C
B
提交了一个脚本。让我们称之为 script 1
C
提交了一个脚本。的 script 2
现在,如果你还没有看到问题,那么这些更改被带入master的顺序是任意的。开发人员无法对其脚本进行适当的版本化(假设在团队中没有就提交顺序进行通信)。 script 2
可以在某个时候引入,迁移,之后 script 1
会被引入并放置在 script 2
之前'用于飞路脚本版本的文件。
当数据库已经迁移过去时,Flyway如何管理“插入”脚本?
这是我将当前系统转移到使用flyway的唯一问题之一,我们将不胜感激任何见解/帮助。
答案 0 :(得分:1)
根据this blog,Flyway忽略了无序迁移(即它只迁移已迁移的最新版本的文件)。但是,flyway.outOfOrder
属性可能设置为true
,以便解决此排序问题。
flyway.outOfOrder=true
另一个有用的提示是,不使用版本的增量整数,而是使用Timestamps。时间戳越精确,版本冲突的可能性就越小。
e.g。
20140707.154401__create_customer_table.sql
20140707.154402__alter_customer_table.sql