2012-07-24 57 views
8

我们的系统如何让flyway重新运行迁移?

我们正试图把移民作为.sql文件版本控制之下。开发人员可以编写一个VN __ * SQL文件,承诺版本控制和运行每5分钟会自动迁移到一个开发和测试数据库的工作。一旦变更证明不会导致问题,其他人就会运行手动工作来运行生产迁移。

我的问题:

我创建了几桌演示迁移。我在我的PC上检查了V4__DemoTables.sql进入版本控制。

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

但.sql文件有一个错字。而且我们使用的Neteeza与flyway有问题,自动在BEGIN TRAN ... END TRAN中包装迁移。所以迁移创建了2个表格,然后在第三个表格之前中止。

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

五分钟后提取的更新,但飞行用抱怨的校验和不匹配。所以它不会运行更新的V4__DemoTables.sql文件。

如何获得flyway接受更新的文件并在出现错字时更新SCHEMA_VERSION文件中的校验和?

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

所以这是该文档意味着我需要做的:

  • 离开V4__作为一个“成功”的迁移根据 SCHEMA_VERSION表。

    创建V4_1_删除是在V4__错字 线之前创建的表。

    创建V4_2_具有从原始文件错字修复完成所有 真正的工作。

这是正确的吗?

回答

11

如果迁移成功完成,但有些数据库对象是不完全正确,但(错字中列名,...),照你说的和推后续脚本修复它(重命名列,...)。

如果迁移失败,并没有与DDL事务中运行的数据库,数据库必须手动清洗。这意味着:

  • 还原对DB
  • 迁移卸下从SCHEMA_VERSION表的版本的效果和标记与前一个作为当前

该第二步骤将在未来被自动化与introduction of the flyway.repair() command

+0

感谢您的快速回复。我不知道如何将前一行标记为当前。 – 2012-07-24 22:23:41