我正在Liquibase
中实现一个变更集,在尝试运行之前需要几个不同的前提条件才能有效。
场景 #1:如果表 A、B、C 存在,则标记为已运行
场景 #2:如果表 X,Y,Z 不存在,则停止执行变更集
换句话说,我需要两个具有不同onFail
子句的<preConditions>
标签。这在Liquibase中是允许的吗?我似乎无法让它工作。文档的信息量不是很大。
目前不允许这样做。只能有一个块。
将其分解为两个单独的更改集是否有效?
将它们
与<or>
或<and>
组合在一起,如下所示:
<preConditions>
<or>
<runningAs username="liquibase" />
<runningAs username="sa" />
</or>
</preConditions>
以下是有关前提条件的一些文档。
我只是使用了的解决方法:
-
创建正常的前提条件
<!-- pre-condition tests --> <preConditions onFail="WARN"> <runningAs username="${db.maintenance.user}" /> </preConditions>
-
为另一个 onFail 级别创建一个空
changeSet
<changeSet id="liquibase-pre-1" author="liquibase" runAlways="true" runOnChange="true" runInTransaction="false"> <preConditions onFail="HALT" onFailMessage="..."> <!-- ... --> </preConditions> <sql> select 1 <!-- (Postgresql) or "select 1 from dual" (Oracle) --> </sql> </changeSet>