有序列的liquibase不可知插入

时间:2019-05-18 00:08:42

标签: liquibase

我想使用序列填充id字段在liquibase中创建一个新的插入变更集。有什么方法可以使Oracle和Postgres的数据库不可知?

这是一种预言方式:

    <changeSet author="XX" id="XX">
        <insert tableName="NODO_MENU">
            <column name="ID" defaultValueSequenceNext="SEQ_NODO_MENU" />
            <column name="CODIGO" value="ABC" />
            <column name="ORDEN" value="0" />
        </insert>
        <rollback>
            <delete tableName="NODO_MENU">
                <where>CODIGO = 'ABC'</where>
            </delete>                       
        </rollback>
    </changeSet>

在postgres中不起作用: [失败的SQL:插入到public.NODO_MENU(ID,CODIGO,ORDEN)值(SEQ_NODO_MENU.NEXTVAL,'ABC','0')]

要使其在postgres中工作,我将column标记更改为:

<column name="ID" valueComputed="nextval('SEQ_NODO_MENU')" />

如何编写此变更集以使其在Oracle Postgress中工作?

1 个答案:

答案 0 :(得分:0)

您可以编写两个单独的变更集。一个用于Postgres,一个用于Oracle。

只需向其添加相应的dbms preConditions

因此:

<changeSet author="XX" id="XX_oracle">
    <preConditions onFail="MARK_RAN">
        <dbms type="oracle"/>
    </preConditions>
    <!-- your logic for Oracle-->
</changeSet>

<changeSet author="XX" id="XX_postgres">
    <preConditions onFail="MARK_RAN">
        <dbms type="postgresql"/>
    </preConditions>
    <!-- your logic for Postrgres-->
</changeSet>