如何让flyway重新运行迁移?

时间:2012-07-24 18:19:40

标签: flyway

我们的系统

我们正在尝试将迁移作为.sql文件置于版本控制之下。开发人员会编写VN __ * .sql文件,提交版本控制,每5分钟运行一次的作业会自动迁移到Dev and Test数据库。一旦更改证明不会导致问题,其他人将运行手动作业以在生产中运行迁移。

我的问题:

我进行了一次演示迁移,创建了几个表。我在我的电脑上检查了V4__DemoTables.sql到版本控制。

在我们的Linux机器上,每5分钟运行一次的作业从版本控制中提取新文件,然后运行flyway.sh文件。它检测到文件并执行它。

但.sql文件有拼写错误。我们正在使用Neteeza,它有一个问题,飞路在BEGIN TRAN ... END TRAN中自动包装一个迁移。因此,迁移创建了2个表,然后在第三个表之前中止。

我想没问题。我删除了.sql文件创建的2个表。检查版本控制中的V4__,修复错字并重新提交。

五分钟后,更新被提取,但是flyway抱怨校验和不匹配。因此它不会运行更新的V4__DemoTables.sql文件。

如果出现拼写错误,如何让flyway接受更新的文件并更新SCHEMA_VERSION文件中的校验和?

阅读文档似乎开发人员建议我应该使用修复程序创建一个新的V4_1_DemoTables.sql文件。但是这会与V4__文件中的命令发生冲突,所以这看起来不对。

以下是文档暗示我需要做的事情:

  • 将V4__作为“成功”迁移保留 SCHEMA_VERSION表。

    创建V4_1_以删除在拼写错误之前创建的表 V4中的一行__。

    创建V4_2_,其中包含原始文件中的拼写错误修复程序以执行所有操作 真正的工作。

这是对的吗?

1 个答案:

答案 0 :(得分:13)

如果迁移成功完成,但是某些数据库对象还不是正确的(列名中的拼写错误,...),请按照您的说法执行并按跟踪 - 修复它的脚本(重命名列,...)。

如果迁移失败,并且它未在具有DDL事务的数据库上运行,则必须手动清除数据库。这意味着:

  • 恢复迁移对数据库的影响
  • 从SCHEMA_VERSION表中删除版本并将前一个版本标记为当前版本

将来introduction of the flyway.repair() command会自动执行第二步。