2017-10-10 111 views
1

我目前正在使用Flyway命令行工具來管理我們的腳本,這些腳本將通過我們的CI構建服務器觸發的發佈流程進行調用。什麼是從Flyway遷移中刪除可重複腳本的最佳方法

問題是我有274個可重複的遷移,覆蓋包規格,包體,函數,過程,視圖和物化視圖。

當我運行遷移時,所有工作都按預期執行,隨後執行遷移並執行任何已更改的可重複遷移,但可以在下一個版本中說,我們希望刪除一個可重複遷移所維護的對象。例如,我們要刪除定義了ProcedureOne的可重複腳本(即R__ProcedureOne.sql)。

要做到這一點,我會有一個新的遷移腳本(V3.1.5.1.01__DropProcedureOne.sql),但我也會刪除可重複的遷移腳本,以便不再創建和維護該對象。

但是,執行飛路信息顯示R__ProcedureOne.sql腳本的狀態爲MISSING。

雖然我同意它缺少,但它是一個故意的行動,刪除它,因爲它不再需要反對錯位。

我知道migrate選項ignoreMissingMigrations,但我認爲使用它會引入風險並可能掩蓋真正缺少的文件。

關於如何最好地刪除可重複腳本的一般指導是什麼?

回答

0

我建議你簡單地保留文件,但使其爲空(即零字節)。或者在文件中有註釋,說明它所代表的對象已被刪除。

至於實際刪除它,從你建議的另一種選擇可能是更新可重複的遷移刪除自己,然後再次更新爲零長度。這具有能夠被重放到空數據庫中的優點;由於可重複的遷移在版本化後應用,因此您的示例中的過程將不存在被刪除。缺點是運行兩次遷移。

+0

感謝您的回覆。 一些有趣的選項。我確實喜歡讓獨立的版本化腳本放棄這個過程,但我不確定我是如何將永久性可重複腳本留在那裏的,即使它是空白的。只是感覺就像留下了混亂。 編輯schema_version表的內容有什麼感覺? drop proc腳本可以刪除對可重複腳本的所有引用(未嘗試過,因此不知道這是否可行) – cdavid15

+0

您是否需要通過運行版本1中的腳本來重現數據庫?如果沒有,那麼你可以對保存在schema_version表中的歷史記錄採取一些自由。我不會推薦這個,因爲你會失去flyway爲你創建的審計歷史。 您需要嘗試如何實現它,因爲Flyway可能會在運行時鎖定schema_version表。我建議將記錄複製到另一個表以保留歷史記錄 –

相關問題