一次Liquibase变更集中的2个前提条件

时间:2018-08-10 09:58:47

标签: sql database liquibase changelog

是否可以为变更集的单个元素创建两个前提条件?就像在SQL Server数据库中运行changelog文件时生成一列,在Oracle数据库中运行changelog文件时生成另一列一样。例如,以这种方式:

... || datainputForm.get('testGroup.t3').errors"

2 个答案:

答案 0 :(得分:1)

无法在条件内创建列。

如果我了解您的问题,那么您有两个(也许更多)选择:

  1. 将每个dbms的changeSet分开
  2. 为dbms创建属性,并按以下方式使用它们:

    <property dbms="oracle" name="autoincrement" value="true" />
    <property dbms="oracle" name="autoincrementType" value="NUMBER" />
    <property dbms="mssql" name="autoincrement" value="false" />
    <property dbms="mssql" name="autoincrementType" value="FLOAT" />
    
    
    <changeSet id="create_a_table" author="system">
        <createTable tableName="a_table">
            <column name="a_column" autoIncrement="${autoincrement}" type="${autoincrementType}" />
        </createTable>
    </changeSet>
    

我没有测试过,这只是解决问题的方法。

答案 1 :(得分:0)

这似乎是不可能的,但是另一个好的解决方案是为这些单个元素创建变更集。在此示例中,可能是:

<changeSet author="Me" id="1528876614155">
    <createTable tableName="DAILY DATA">
        <column name="ID" type="NUMBER"/>
    </createTable>
</changeset>

<changeSet author="Me" id="1528876614156">
    <preConditions onFail="MARK_RAN" onSqlOutput="TEST">
        <dbms type="oracle" />
    </preConditions>
    <addColumn tableName="DAILY_DATA">
        <column name="VALUE" type="NUMBER"/>
    </addColumn>
</changeset>
<changeSet author="Me" id="1528876614157">
    <preConditions onFail="MARK_RAN" onSqlOutput="TEST">
        <dbms type="mssql" />
    </preConditions>
    <addColumn tableName="DAILY_DATA">
        <column name="VALUE" type="NUMBER"/>
    </addColumn>
</changeset>