我开始Flyway在我当前的项目中使用数据库迁移,我非常喜欢它.我目前在TEST-Environment中使用PROD-和Derby中的Oracle.
很快,我确实遇到了数据库特定的sql命令的问题,例如
ALTER TABLE T1 MODIFY F1 VARCHAR(256); 关于Oracle vs. ALTER TABLE T1 ALTER F1 SET DATA TYPE VARCHAR(256); 在德比.我看不到编写"供应商中立的alter table modify column datatype"sql的方法.
使用Flyway解决这个问题的最佳方法是什么?
Axe*_*ine 36
您可以使用flyway.locations属性.
在测试中看起来像这样:
flyway.locations=sql/common,sql/derby
Run Code Online (Sandbox Code Playgroud)
并在prod:
flyway.locations=sql/common,sql/oracle
Run Code Online (Sandbox Code Playgroud)
然后,您可以在特定于数据库的位置具有公共语句(V1__Create_table.sql)以及特定于DB的语句(V2__Alter_table.sql)的不同副本.
在我看来,更好的解决方案是在生产和测试中使用相同的DB.是的,您确实失去了一些性能,但另一方面,您还消除了环境之间的另一个差异(以及潜在的错误来源).