2015-02-05 25 views

回答

2

我會通過分割變更爲兩個文件做到這一點:一個包含您的「正規」的變更,另一隻此單一變更。然後創建一個新的「主人」變更包括兩個,以正確的順序:

<databaseChangeLog> 

    <include file="standard_changes.xml" relativeToChangelogFile="true"/> 
    <include file="change_owner.xml" relativeToChangelogFile="true"/> 

</databaseChangeLog> 

change_owner.xml僅包含單變更你在你的問題表現出來了。

這不保證,它總是最後一個跑,因爲你仍然可以同時運行的變化以不同的順序手動設置,但如果你總是運行master.xml那麼你就可以說「更改所有者」最後執行一定。

理論上你可以給「主」更新日誌與當前文件相同的名稱。但由於文件名是變更集「簽名」的一部分,如果您已通過現有文件部署更改,則不會這樣做。

+1

這是一個我認爲的解決方案,但正如你所說的那樣,不能保證將會最後運行... – gudepier 2015-02-05 15:46:02

+0

@gudepier這是你可以實現自動化的最接近的方法。畢竟,你無法阻止任何人手動運行SQL腳本。但是使用包含機制,您至少可以確保您的標準部署過程以正確的順序完成所有事情。 – 2015-02-05 15:47:26

+0

嗯,您可能有權利不幸... – gudepier 2015-02-05 16:05:10

0

由於Liquibase 3.5.0有新的runOrder屬性,有兩個可能的值:firstlast。運行changeSet作爲最後一個示例:

<changeSet id="123" author="author0" runAlways="true" runOrder="last"> 
    <sql> ... </sql> 
</changeSet> 

它尚未在文檔中描述。發佈說明:http://www.liquibase.org/2016/04/liquibase-3-5-0-released.html

相關問題