一个 liquibase 变更集中的 2 个先决条件
2 preconditions in one liquibase changeset
是否可以为变更集的单个元素创建两个先决条件?就像如果变更日志文件在 SQL 服务器数据库中为 运行 则生成一列,如果变更日志文件在 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>
无法在条件内创建列。
如果我理解你的问题,那么你有两个(也许更多)选项:
- 为每个 dbms 分离变更集
为 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>
我没有测试过,只是想知道如何解决这个问题。
这似乎是不可能的,但另一个好的解决方案是为这些单个元素创建变更集。在这个例子中它可以是:
<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>
是否可以为变更集的单个元素创建两个先决条件?就像如果变更日志文件在 SQL 服务器数据库中为 运行 则生成一列,如果变更日志文件在 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>
无法在条件内创建列。
如果我理解你的问题,那么你有两个(也许更多)选项:
- 为每个 dbms 分离变更集
为 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>
我没有测试过,只是想知道如何解决这个问题。
这似乎是不可能的,但另一个好的解决方案是为这些单个元素创建变更集。在这个例子中它可以是:
<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>