在探索使用序列與AUTO-INCREMENT的細微差別我努力尋找一個如何製作數據庫不可知論liquibase項目的實際例子。使用liquibase使用序列的數據庫不可知例子
方案要求:
一些列創建一個表,插入數據,其中PKID的價值,是一些計算值
我的出發點是現有的Postgres數據庫,在引用的.sql文件在changeSet
創建一個序列:由創造tables.sql
<sqlFile path="create-tables.sql" relativeToChangelogFile="true"/>
SQL
CREATE TABLE new_table (
pkid integer NOT NULL,
);
CREATE SEQUENCE new_table_pkid_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
還有比是變更插入基於序列記錄如下:
<changeSet author="yoman" id="123">
<insert tableName="new_table">
<column name="pkid" valueComputed="nextval('new_table_pkid_seq')"/>
</insert>
</changeSet>
然而,MySQL不支持序列。 Oracle還使用不同語法的序列。
所以我不知道如何制定一個解決方案,將爲所有三個工作?
我的想法是
刪除使用序列和/或功能,並使用自動增量所有3分貝的。然後刪除create-tables.sql並使用liquibase XML
changeSet
語法創建表。在postgres中創建一個函數而不是序列,並在Oracle和MySQL中創建相同的名稱函數,以模擬序列函數。然後指定函數名稱:
<column name="pkid" valueComputed="INCREMENT_FUNCTION()"/>
問題..
問題是我不知道XML是什麼樣子,如果我試圖#1(我做例如使用
dbms
?)?另外,序列提供了更多的靈活性,因此不確定其他貢獻者會同意使用AUTO-INCREMENT。不知道如何實際爲這3個目標主機在liquibase中生成一個通用函數。
據我所知,liquibase是一個驅動數據庫不可知性設置概念的工具。但是我找不到任何關於如何創建一個可以針對多個數據庫目標的liquibase項目的基本示例的文檔。