7

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

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

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

换句话说,我需要两个带有不同子句的<preConditions>标签。onFail这在 Liquibase 中是否允许?我似乎无法让它工作。文档信息量不大。

4

3 回答 3

6

目前是不允许的。可以只有一个块。

将其分解为两个单独的变更集会起作用吗?

于 2013-10-29T18:24:16.160 回答
2

我简单使用的解决方法:

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

    <!-- 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>
    
于 2015-02-24T09:08:20.790 回答
1

将它们与<or><and>像这样组合:

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

是一些关于前置条件的文档。

于 2013-09-18T08:32:15.523 回答