2011-12-19 282 views
1

db-maintain具有可重複腳本的概念,如存儲過程/觸發器。當這樣的腳本發生變化時,它需要再次鋪開。 Flyway似乎總是檢查文件名約定。所以要有一個可重複的腳本,我們可能需要重命名文件。有沒有更有效的方法來做到這一點?使用flyway有效地管理可重複腳本

+0

只是出於好奇:你能更詳細地描述你的用例嗎? – 2011-12-20 00:48:39

+0

的想法是維護存儲過程和觸發器,就像我們維護代碼一樣。如果需要更改,那麼只需更改文件,因此校驗和不同,並且腳本再次滾存到數據庫中。 確保腳本實際上是可重複的,當然應該由開發人員決定。例如:在MySQL中;開發人員應確保在CREATE觸發器或過程塊之前存在DROP IF EXISTS語句。 – gazal 2011-12-27 06:08:33

+0

謝謝。我明白你現在從哪裏來。觸發器和存儲過程像所有其他數據庫對象一樣,因此我認爲它們應該遵循正常的遷移模式。 – 2011-12-28 08:39:11

回答

3

Flyway開始在版本4.0中支持可重複的遷移。每次校驗和更改時都會重新應用可重複遷移,並且可以在版本控制中將其作爲單個文件進行維護。

確保相同的可重複移植可以多次應用 是您的責任。這通常涉及在您的DDL語句中使用CREATE 或REPLACE子句。

更多詳情here

2

此問題已在Issue Tracker和此other question中出現。

目前沒有開箱即用的支持。

我個人

  • 封裝在存儲過程或觸發器的重複動作,並將其添加到數據庫作爲常規遷移
  • 確保該程序/觸發器被每遷移後調用一次的一部分這(可能是少一個行語句)
  • 確保必要的更改過程/觸發器後也發生,因爲經常遷移的一部分

如果沒有這樣做,請隨時登錄Issue,並留下有關您的用例的詳細信息。

更新:從Flyway 4.0開始,完全支持重複性腳本。請參閱https://flywaydb.org/documentation/migration/repeatable