我开始在我当前的项目中使用Flyway
进行数据库迁移,我非常喜欢它。我目前在TEST-Environment中使用PROD-和Derby中的Oracle。
很快,我确实遇到了数据库特定的sql命令的问题,例如
ALTER TABLE T1 MODIFY F1 VARCHAR(256);
ALTER TABLE T1 ALTER F1 SET DATA TYPE VARCHAR(256);
关于德比。我看不到编写“供应商中立的alter table modify column datatype”sql的方法。
使用Flyway处理此问题的最佳方法是什么?
答案 0 :(得分:33)
您可以使用flyway.locations属性。
在测试中看起来像这样:
flyway.locations=sql/common,sql/derby
和prod:
flyway.locations=sql/common,sql/oracle
然后,您可以在特定于数据库的位置使用公共语句(V1__Create_table.sql)和特定于DB的语句(V2__Alter_table.sql)的不同副本。
在我看来,更好的解决方案是在生产和测试中使用相同的DB。是的,你确实失去了一些性能,但另一方面你也消除了环境之间的另一个差异(和潜在的错误来源)。
答案 1 :(得分:0)
Oracle与某些桌面数据库之间的SQL差异很小。开发人员是否可以插入自定义代码,以便在运行时根据环境对SQL进行轻量级动态剥离(例如,删除表空间指定)?
我更喜欢这种方法,依靠每个开发人员手动保持两组SQL同步。