重新运行可运行的可重复迁移,而无需更改校验和

时间:2019-08-01 11:28:46

标签: postgresql migration flyway

所以我有几个可重复的迁移。

  1. R__first.sql创建一个视图(将其拖放并在创建之前进行级联)。
  2. R__second.sql创建另一个引用第一个视图的视图。

现在假设我修改了第一个迁移,结果视图不再包含第二个迁移所使用的列。由于级联选项,Flyway会很高兴地重新运行此第一次迁移,将重新创建第一个视图,并删除第二个视图。

此后我想发生的是,第二个(相关的)迁移也将运行,并且会引发错误(因为它使用的列不再存在)。

有这种可能吗?

以某种方式强迫飞行器检查现有迁移的结果是否不再存在? 还是可能有依赖迁移之类的东西?如果一个更改,即使校验和相同,也可以将其他更改标记为重新运行。 还是有可能使用afterMigrate入侵某些内容?但没有显式复制粘贴相同的create-if-not-exists sql。

2 个答案:

答案 0 :(得分:0)

当然,在发布此内容之后,我发现您可以使用CREATE OR REPLACE而不是删除然后创建。如果您要删除另一个视图中正在使用的列,则实际上会引发错误。

答案 1 :(得分:0)

article描述了您可能会感兴趣的想法。

R__second.sql中,您可以将DDL放入PLSQL,您首先要检查在R__first.sql中创建的视图中存在哪些列,然后有条件地重新创建第二个视图。

在我的项目中,我对SELECT a.* FROM的看法很少,我将按照这种方式进行操作。