我正在实现一个变更集,Liquibase
在它尝试运行之前需要一些不同的先决条件才能有效。
场景 #1:如果表 A,B,C 存在,则标记为已运行
场景 #2:如果表 X、Y、Z 不存在,则停止执行变更集
换句话说,我需要两个带有不同子句的<preConditions>
标签。onFail
这在 Liquibase 中是否允许?我似乎无法让它工作。文档信息量不大。
目前是不允许的。可以只有一个块。
将其分解为两个单独的变更集会起作用吗?
我简单使用的解决方法:
创建一个正常的前提条件
<!-- pre-condition tests -->
<preConditions onFail="WARN">
<runningAs username="${db.maintenance.user}" />
</preConditions>
changeSet
为另一个onFail级别创建一个空
<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>
将它们与<or>
或<and>
像这样组合:
<preConditions>
<or>
<runningAs username="liquibase" />
<runningAs username="sa" />
</or>
</preConditions>
这是一些关于前置条件的文档。