Ликвибазная агностическая вставка с последовательностью - PullRequest
1 голос
/ 18 мая 2019

Я хочу создать новый набор изменений вставки в 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) ЗНАЧЕНИЯ (SEQ_NODO_MENU.NEXTVAL, 'ABC', '0')]

Чтобы это работало в Postgres, я изменил тег столбца на:

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

Как мне написать этот набор изменений, чтобы он работал в Oracle и Postgress?

1 Ответ

0 голосов
/ 18 мая 2019

Вы можете написать две отдельные ревизии. Один для 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>
...