我想使用序列填充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中工作?
答案 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>