2012-07-16 434 views
0

我有最初爲PostreSQL定義的liquibase架構。現在,我必須修改模式文件以支持Oracle。我有一個變更集,它有一個<sql>標記。它有一個查詢訪問pg_catalog表以設置序列的值。但是,這對Oracle不起作用。如果我將其刪除,Liquibase會抱怨check-sum驗證失敗。它抱怨,即使我有一個空的<sql>標籤或其中指定的其他查詢。在這個變更集中,我有很多其他的create-table語句,所以我不能只從dbms屬性中刪除oracle。有沒有什麼辦法可以抑制這個SQL運行Oracle?Liquibase:自定義SQL語句

回答

1

在DBMS的changeset屬性是設計來處理這個問題的機制.....聽起來像你想一個changesest內做太多的(但我猜你想通了這一點)

校驗和驗證失敗是liquibase的安全機制,旨在防止數據庫被篡改模式文件。

如何解決它是運行liquibase時使用clearChecksums選項。它告訴liquibase重新計算數據庫中已有變更集的校驗和。這將使您的postgres數據庫實例能夠接受對您爲Oracle所做的變更集的更改。

+0

是的,我的模式文件對所有create-table語句(大約69個表格)都有一個變更集,這是遺留代碼並且已經在生產中,所以我無法更改它的重構。但clearChecksums會重新計算所有變更集,是嗎?如果是這樣,我寧願避免冒這個風險。 – devang 2012-07-16 21:55:00

+1

@gotuskar是的,它會重新計算所有的變更集,但沒關係,前提是您只更改了一個變更集。變更集是liquibase用來確保變更集與之前應用的變更集相同的機制。這也是liquibase如何支持「runOnChange」屬性(只有在更改後才應用變更集)。我建議在生產數據庫的副本上進行測試。 – 2012-07-16 22:14:37

+0

由於我將應用程序移植到Oracle,因此我更改了許多更改集,這就是爲什麼我阻止使用此選項。 – devang 2012-07-16 22:24:05