首页 > 解决方案 > 一个 liquibase 变更集中的 2 个先决条件

问题描述

是否可以为变更集的单个元素创建两个先决条件?就像如果更改日志文件在 SQL Server 数据库中运行,则生成一列,如果更改日志文件在 Oracle 数据库中运行,则生成另一列。例如,以这样的方式:

<changeSet author="Me" id="1528876614155">
 <createTable tableName="ELECTRICITY_PRODUCTS">

   <preConditions onFail="MARK_RAN" onSqlOutput="TEST">
        <dbms type="mssql" />
        <column autoIncrement="true" name="EP_ID" type="NUMBER">
   </preConditions>
   <preConditions onFail="MARK_RAN" onSqlOutput="TEST">
        <dbms type="oracle" />
        <column autoIncrement="false" name="EP_ID" type="FLOAT">
   </preConditions>
 </createTable>
</changeset>

标签: sqldatabaseliquibasechangelog

解决方案


无法在条件内创建列。

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

  1. 分离每个 dbms 的变更集
  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>
    

我没有测试过,只是想知道如何解决这个问题。


推荐阅读