所以我有几个可重复的迁移。
R__first.sql
创建一个视图(将其拖放并在创建之前进行级联)。R__second.sql
创建另一个引用第一个视图的视图。现在假设我修改了第一个迁移,结果视图不再包含第二个迁移所使用的列。由于级联选项,Flyway会很高兴地重新运行此第一次迁移,将重新创建第一个视图,并删除第二个视图。
此后我想发生的是,第二个(相关的)迁移也将运行,并且会引发错误(因为它使用的列不再存在)。
有这种可能吗?
以某种方式强迫飞行器检查现有迁移的结果是否不再存在? 还是可能有依赖迁移之类的东西?如果一个更改,即使校验和相同,也可以将其他更改标记为重新运行。 还是有可能使用afterMigrate入侵某些内容?但没有显式复制粘贴相同的create-if-not-exists sql。
答案 0 :(得分:0)
当然,在发布此内容之后,我发现您可以使用CREATE OR REPLACE
而不是删除然后创建。如果您要删除另一个视图中正在使用的列,则实际上会引发错误。
答案 1 :(得分:0)
此article描述了您可能会感兴趣的想法。
在R__second.sql
中,您可以将DDL放入PLSQL,您首先要检查在R__first.sql
中创建的视图中存在哪些列,然后有条件地重新创建第二个视图。
在我的项目中,我对SELECT a.* FROM
的看法很少,我将按照这种方式进行操作。