【问题标题】:liquibase agnostic insert with sequence带有序列的 liquibase 不可知插入
【发布时间】:2019-10-05 06:55:00
【问题描述】:

我想在 liquibase 中创建一个新的插入变更集,使用序列填充 id 字段。有什么方法可以使其与 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: INSERT INTO public.NODO_MENU (ID, CODIGO, ORDEN) VALUES (SEQ_NODO_MENU.NEXTVAL, 'ABC', '0')]

为了让它在 postgres 中工作,我将列标签更改为:

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

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

【问题讨论】:

    标签: liquibase


    【解决方案1】:

    您可以编写两个单独的变更集。一个用于 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>
    

    【讨论】:

      猜你喜欢
      • 2015-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-24
      • 2012-02-23
      • 2012-11-01
      • 2021-01-21
      • 1970-01-01
      相关资源
      最近更新 更多