2014-05-12 35 views
6

我有一個數據庫,通常需要修改視圖和存儲過程。我希望能夠將這些視圖存儲在另一個目錄中,並在編寫遷移時包含sql代碼。基本上,目錄結構將是從飛路遷移調用外部的SQL

views/ 
    my_view.sql 
functions/ 
    my_func.sql 
sql/ 
    V1__add_view.sql 

而且V1__add_view.sql會像

\i views/my_view.sql 

這將目前在PSQL工作,但不是在遷徙路線遷徙。這樣做的好處是,當我們想要進行更改時,我們可以修改該視圖,並將其包含在下一次遷移中。它也將消除大量的遷移複製粘貼。

有什麼辦法可以將外部SQL腳本包含在flyway遷移中嗎?

+0

你曾經想出解決辦法?另一個原因,我也對這樣的事情感興趣:大量的創建腳本以及它們的訂購方式。 [Tomasz](http://stackoverflow.com/users/605744/tomasz-nurkiewicz)目前的指導意見是使用增量版本號_per file_來強制排序 - 這在我看來會降低易讀性和可發現性。我希望有一個「版本」遷移腳本,其中使用了包含的腳本,並且順序正確。 – rbellamy

回答

1

這聽起來像你可能能夠使用Repeatable migrations完成此操作。

我不認爲flyway支持像\ i聲明那樣調用外部腳本。如果你想嘗試導入路線,你可以使用腳本的佔位符。使用

您例如,使用佔位符在SQL遷移文件

${my_view} 

當你調用遷徙路線定義與你的意見/ my_view.sql文本佔位符替換值。我不知道你使用的調用飛路是什麼,但在螞蟻它會是這樣的

<loadfile property="flyway.placeholder" srcfile="views\my_view.sql"/> 
<flyway:migrate> 
    <locations> 
     <location path="database/migrations"/> 
    </locations> 
    <placeholders> 
     <placeholder name="my_view" value="${flyway.placeholder}"/> 
    </placeholders> 
</flyway:migrate> 

的文檔還具有一個例子:https://flywaydb.org/documentation/ant/migrate

+0

編輯爲建議使用可重複的遷移(R__add_my_view.sql,而不是V1__add_view.sql) – fishy