【问题标题】:Using flyway with distributed source-code management (i.e. Git, Mercurial, etc...)将 flyway 与分布式源代码管理(即 Git、Mercurial 等)一起使用
【发布时间】:2014-08-27 11:10:06
【问题描述】:

我是一个包含多个模块(大约 30 个 jar)的大型 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 如何管理“inserted”脚本?

这是我将当前系统转为使用 flyway 的唯一担忧之一,我们将不胜感激。

【问题讨论】:

    标签: git database-migration flyway


    【解决方案1】:

    根据this blog,Flyway 会忽略无序迁移(即,它只会迁移超过已迁移的最新版本的文件)。但是,flyway.outOfOrder 属性可以设置为 true 以启用此排序问题的解决方法。

    flyway.outOfOrder=true
    

    另一个有用的提示是,不要对版本使用增量整数,而是使用时间戳。时间戳越精确,版本冲突的可能性就越小。

    例如

    20140707.154401__create_customer_table.sql
    20140707.154402__alter_customer_table.sql
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多