使用Flyway的“特定于数据库”的sql脚本的最佳方式

时间:2012-11-28 16:26:07

标签: flyway

我开始在我当前的项目中使用Flyway进行数据库迁移,我非常喜欢它。我目前在TEST-Environment中使用PROD-和Derby中的Oracle。

很快,我确实遇到了数据库特定的sql命令的问题,例如

    Oracle vs 上的
  • ALTER TABLE T1 MODIFY F1 VARCHAR(256);
  • ALTER TABLE T1 ALTER F1 SET DATA TYPE VARCHAR(256);关于德比。

我看不到编写“供应商中立的alter table modify column datatype”sql的方法。

使用Flyway处理此问题的最佳方法是什么?

2 个答案:

答案 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同步。