flyway和可重复迁移的初始化

时间:2017-03-21 15:00:04

标签: database-migration flyway

https://flywaydb.org/documentation/migration/repeatable引用flyway doc:

  

可重复迁移没有版本。相反,他们是   (重新)每次校验和更改时都应用。

     

这对于管理其定义可以的数据库对象非常有用   然后只需在版本控制中的单个文件中维护。

     

在单次迁移运行中,始终可重复迁移   在所有待处理的版本化迁移完成后,最后应用   执行。可重复迁移按其顺序应用   描述

这听起来令人兴奋,但我似乎无法找到有关其实际工作方式以及如何初始化可重复迁移的任何说明。我理解,对于Versioned迁移,我可以创建一个基本迁移(https://flywaydb.org/documentation/existing),然后运行baseline命令为我未来的版本做好准备。但是对于可重复的迁移,我不明白flyway是如何进行校验和更改的。

  

相反,他们是

     
    

(重新)每次校验和更改时都会应用。

  

flyway是否假设我从头开始重新创建数据库以使校验和比较有效?这将解释它如何能够比较校验和(因为它可以访问已在数据库中的对象的文件定义)。

2 个答案:

答案 0 :(得分:3)

假设您的可重复迁移SQL脚本的校验和是例如123。

  1. 首次运行Flyway时,它会检查schema_version表,发现尚未应用此可重复迁移,因此它将执行它。
  2. 第二次启动Flyway时,它会检查您的SQL脚本的校验和是否等于123,这等于自上次以来在schema_version中记录的内容,因此您的可重复迁移脚本将无法执行。
  3. 现在让我们假设您修改了第三个版本的可重复迁移SQL脚本,并且校验和更改为例如987.当您启动Flyway时,它会发现987不等于仍然存储在schema_version(123)中的内容,所以这次它将执行新版本的可重复迁移SQL,然后更新123校验和值。 schema_version到987。
  4. 这意味着您可以根据需要随每个新版本不断更改可重复的迁移脚本。您无法以这种方式更新基线(不可重复)脚本,因为Flyway会抛出有关不匹配校验和的错误。

答案 1 :(得分:1)

我测试了flyway并且现在了解了初始化:只要文件名没有特定的预提示(我认为'REPEATABLE'是默认值),flyway将忽略现有的脚本/迁移 - 只要迁移没有重命名要执行的飞路会忽略它们。