2014-01-31 98 views
1

我們使用liquibase來生成數據庫更改,但需要將這些腳本寫入SQL文件,因爲我們的數據庫服務器既沒有Liquibase也沒有安裝JVM。您可以通過主要版本控制Liquibase updateSQL輸出嗎?

我們使用updateSQL命令來創建需要進行更改的DDL腳本,但是如果我們運行(在我們的開發服務器上)「dropAll」,我們會爲每個版本獲取一個更改集。

有沒有一種方法可以爲一組變更集(即所有以前的版本)運行Liquibase定期「更新」,然後僅爲最後一個版本生成updateSQL輸出?從本質上講,我們可以參數化我們的構建過程,以指示我們的目標發佈版本,並自動爲該版本生成SQL?

謝謝

+0

使用liquibase 3.1,您的dropAll命令更容易清除數據庫,以便您可以生成updateSql的方法是使用「脫機」模式。 http://www.liquibase.org/documentation/offline.html –

回答

1

有幾種方法可以運行部分更改日誌。

如果使用版本(changelog-1.0.xml,changelog-1.1.xml,changelog-2.0.xml)拆分更改日誌文件,然後擁有主更改日誌文件<包含>的備件文件,那麼最簡單的解決方案可能是運行updateSql傳遞所需的更新日誌版本。如果要爲整個數據庫生成sql,請運行「liquibase --changelogFile = master.changelog.xml updateSql」。如果你想爲2.1版本生成sql,運行「liquibase --changeLogFile = changelog-2.1.xml updateSql」

@Jens回答很好,而且是我經常建議的。例如,與上述通過合併的修補程序版本捕獲通過舊的更改日誌版本引入的新變更集的選項相比,它具有優勢。

除此之外,您可以使用contextpreconditions來動態控制運行的內容。根據您的設置,可能有辦法讓這些人爲您工作。

最後總是會有extension system,您可以在其中編寫自定義邏輯,瞭解如何根據文件名或其他適用於您的其他機制來分析和執行更新日誌以更新舊版本更改集。

4

我們有一個類似的設置。

我們處理這個問題的方式是我們有一個始終保持最後正式版本的「集成」數據庫。

當我們有一個新的候選版本時,我們讓liquibase運行(updateSQL)這個集成數據庫。由於它是最新版本(當前版本),updateSQL只會寫出新版本候選版本與上一版本之間的區別。

所以你有一個delta ddl需要被用來從x版本轉到y版本。

發佈候選版本發佈後,我們讓liquibase也更新集成數據庫。

相關問題