如何在schema_version升级之前执行preFlywayUpgrade脚本

时间:2016-08-11 05:20:25

标签: flyway

我们正在尝试从flyway 2.0.3迁移到4.0.3。这失败了,因为flyway尝试从schema_version表中删除主键,但它在2.0.3中没有。阅读以前关于飞路升级问题的帖子,似乎我们有两个选择。尝试以几个步骤迁移,首先迁移到2.3,(可以跳过升级到3?),然后再到4.0.3或手动更新schema_version表。出于各种原因,我们想做后者。

使用flyway的最佳方法是什么?我们的客户没有可用的数据库客户端工具,可以直接在数据库上执行SQL。有没有办法在升级到schema_version表之前执行sql脚本,例如

preFlywayUpgrade.sql

?我尝试了preRepair.sql,但只有在flyway成功更新了schema_version表后才会执行。

编辑:2016-08-18: 我最终从版本2.3.1,3.2和4.0.3下载了flyway src,将所需的sql语句从2.0.3迁移到4.0.3,并将生成的sql添加到flyway-core-4.0.3,替换现有的4.0.3迁移脚本。 我可以理解你不想永久保留旧的迁移代码,但是我使用过的项目保留了他们的数据库迁移脚本多年,有些客户不经常升级。鉴于flyway是一个用于从任何给定版本逐步升级的工具,如果它支持升级本身更舒适,那将是不错的。 (不要误解我的意思,我真的很感谢你所做的所有工作,我认为这是一个很棒的工具!) 一个想法可能是让flyway将自己的版本记录写入schema_version表。这样就可以更容易地识别需要对schema_version表本身进行哪些更改。

2 个答案:

答案 0 :(得分:1)

这样的解决方案有帮助吗?

https://stackoverflow.com/a/50390573/2681568

我们使用它来从Flyway 3透明地升级到5,但类似的东西也可能有帮助。

答案 1 :(得分:0)

如果您希望Flyway为您完成工作,您必须遵循内置升级路径并迁移到最新版本的每个主要版本,然后再转到下一个版本。否则你就是自己。

或者您也可以删除schema_version表并使用新版本的Flyway再次为数据库建立基线。