2016-12-20 42 views
2

我使用的是可重複的飛行路徑遷移,它可以在一定情況下運行多次的情況下執行一些數據遷移。我在遷移.sql代碼的註釋中放置了一個佔位符值,例如$ {TRIGGER_DATA_UPDATE}。我們的想法是從flyway.conf(或更改flyway.conf的bash腳本)更改此佔位符值,並進行可重複的遷移運行。如果佔位符發生更改,可重複的飛行路徑遷移將不會再次運行

據我所見,更改佔位符不會導致可重複遷移再次運行。它只會運行一次。它看起來好像校驗和計算沒有考慮佔位符值。

這是功能還是錯誤?

相反,如果我直接在可重複遷移內部編輯註釋,則會檢測到更改,並且遷移將在下一次flyway調用中運行。

這裏是可重複的遷移.sql文件:

-- The following line will trigger execution of this script appropriately when upgrade.shis executed 
    /* ${TRIGGER_DATA_UPDATE} */ 
    UPDATE restcomm_accounts SET password = auth_token, password_algorithm = 'md5' WHERE password IS NULL; 

的TRIGGER_DATA_UPDATE是佔位符值。

這裏是flyway.conf的重要組成部分:

flyway.placeholders.TRIGGER_DATA_UPDATE=this_part_changes 

回答

0

你說得對,校驗和計算是對文件內容(只)。這似乎是設計的; SqlMigrationResolver.java

作爲一種解決方法,您可以將其放入callback並使其有條件運行。我假設你在命令行(如你所說的bash),所以它會被放入afterMigrate.sql。你要麼需要使用數據庫的編程語言(比如PLSQL),要麼使用where語句創造性。確保您打開調試(-X),以便記錄回調。即使遷移沒有實際運行任何遷移(即沒有掛起),它也會執行。

嘗試以下操作:

-- The following line will trigger execution of this script appropriately when upgrade.shis executed 
UPDATE restcomm_accounts SET password = auth_token, password_algorithm = 'md5' WHERE password IS NULL 
AND '${TRIGGER_DATA_UPDATE}' = 'Y' 
; 
相關問題