2012-11-28 40 views
17

我開始在我當前的項目中使用Flyway進行數據庫遷移,我非常喜歡它。我目前在TEST-Environment的PROD和Derby中使用Oracle。Flyway的「特定數據庫」sql腳本的最佳方式

很快,我就遇到了特定於數據庫的sql命令的問題,例如,

  • 甲骨文ALTER TABLE T1 MODIFY F1 VARCHAR(256); VS
  • ALTER TABLE T1 ALTER F1 SET DATA TYPE VARCHAR(256);德比。

我看不到一種方法來寫一個「供應商中性改變表修改列數據類型」sql。

使用Flyway處理此問題的最佳方法是什麼?

回答

25

您可以使用flyway.locations屬性。

在測試中是這樣的:

flyway.locations=sql/common,sql/derby 

和PROD:

flyway.locations=sql/common,sql/oracle 

然後,您可以在DB的共同和不同副本的共同聲明(V1__Create_table.sql) - 數據庫特定位置中的特定語句(V2__Alter_table.sql)。

在我看來,更好的解決方案是在產品和測試中使用相同的數據庫。是的,你確實失去了一點成績,但另一方面,你也消除了環境之間的另一個差異(和潛在的錯誤來源)。

+0

感謝Axel的快速回復! – Peti

+0

可能值得放在[flyway FAQ](http://flywaydb.org/documentation/faq.html)的某個地方? – Peti

+4

完成:http://flywaydb.org/documentation/faq.html#db-specific-sql –

0

Oracle與其中一些桌面數據庫之間的SQL差異較小。開發人員是否可以插入自定義代碼,以便在運行時根據環境輕鬆動態地刪除SQL(例如,刪除表空間標識)?

我更喜歡這種方法來依靠每個開發人員手動保持兩組SQL同步。

+0

你應該問這是一個單獨的問題。這是一個有趣的想法。 – Peti

+0

好主意裴 - 創建的問題:http://stackoverflow.com/questions/32121083/customizing-sql-executed-per-environment – dropofahat

+0

酷... Axel方丹已經回答了它:-) – Peti

相關問題