2012-07-24 102 views
8

我們的系統如何讓flyway重新運行遷移?

我們正試圖把移民作爲.sql文件版本控制之下。開發人員可以編寫一個VN __ * SQL文件,承諾版本控制和運行每5分鐘會自動遷移到一個開發和測試數據庫的工作。一旦變更證明不會導致問題,其他人就會運行手動工作來運行生產遷移。

我的問題:

我創建了幾桌演示遷移。我在我的PC上檢查了V4__DemoTables.sql進入版本控制。

在我們的Linux機器運行中提取從版本控制的新文件,每次5分鐘,然後跑了flyway.sh文件中的作業。它檢測到該文件並執行它。

但.sql文件有一個錯字。而且我們使用的Neteeza與flyway有問題,自動在BEGIN TRAN ... END TRAN中包裝遷移。所以遷移創建了2個表格,然後在第三個表格之前中止。

沒問題我以爲。我刪除了.sql文件創建的兩個表。檢查V4__版本控制,修正了錯字並重新提交。

五分鐘後提取的更新,但飛行用抱怨的校驗和不匹配。所以它不會運行更新的V4__DemoTables.sql文件。

如何獲得flyway接受更新的文件並在出現錯字時更新SCHEMA_VERSION文件中的校驗和?

閱讀文檔,似乎開發人員建議我應該使用修補程序創建一個新的V4_1_DemoTables.sql文件。但是這會與V4__文件中的命令相沖突,所以這看起來不對。

所以這是該文檔意味着我需要做的:

  • 離開V4__作爲一個「成功」的遷移根據 SCHEMA_VERSION表。

    創建V4_1_刪除是在V4__錯字 線之前創建的表。

    創建V4_2_具有從原始文件錯字修復完成所有 真正的工作。

這是正確的嗎?

回答

11

如果遷移成功完成,但有些數據庫對象是不完全正確,但(錯字中列名,...),照你說的和推後續腳本修復它(重命名列,...)。

如果遷移失敗,並沒有與DDL事務中運行的數據庫,數據庫必須手動清洗。這意味着:

  • 還原對DB
  • 遷移卸下從SCHEMA_VERSION表的版本的效果和標記與前一個作爲當前

該第二步驟將在未來被自動化與introduction of the flyway.repair() command

+0

感謝您的快速回復。我不知道如何將前一行標記爲當前。 – 2012-07-24 22:23:41