多个前提条件

时间:2013-09-18 07:59:18

标签: liquibase

我正在Liquibase中实现一个变更集,在尝试运行之前需要一些不同的前提条件才能生效。

场景#1:如果表A,B,C存在,则标记为已运行

场景#2:如果表X,Y,Z不存在,则停止执行变更集

换句话说,我需要两个<preConditions>个带有不同onFail子句的标签。 Liquibase中是否允许这样做?我似乎无法使其发挥作用。 docs信息量不大。

3 个答案:

答案 0 :(得分:4)

目前不允许。可以只有一个街区。

是否可以将其分解为两个单独的changeSet?

答案 1 :(得分:2)

我简单使用的解决方法:

  • 创建一个正常的前提条件

    <!-- 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>
    

答案 2 :(得分:1)

将它们与<or><and>结合使用,如下所示:

<preConditions>
    <or>
        <runningAs username="liquibase" />
        <runningAs username="sa" />
    </or>
</preConditions>

Here是关于preConditions的一些文档。