我开始在我当前的项目中使用Flyway
进行数据库迁移,我非常喜欢它。我目前在生产环境中使用Oracle,在测试环境中使用Derby。
很快,我就遇到了数据库特定sql命令的问题,例如
Oracle上的
ALTER TABLE T1 MODIFY F1 VARCHAR(256);
与德比上的ALTER TABLE T1 ALTER F1 SET DATA TYPE VARCHAR(256);
。我看不到一种方法来编写“供应商中立的alter table modify column datatype”sql。
使用Flyway处理这个问题的最好方法是什么?
发布于 2012-11-29 16:16:41
您可以使用flyway.locations属性。
在test In中将如下所示:
flyway.locations=sql/common,sql/derby
在prod中:
flyway.locations=sql/common,sql/oracle
然后,您可以将公共语句(V1__Create_table.sql)放在数据库特定位置的数据库特定语句(V2__Alter_table.sql)的公共副本和不同副本中。
在我看来,一个更好的解决方案是在生产和测试中使用相同的DB。是的,您确实损失了一些性能,但另一方面,您还消除了环境之间的另一个差异(以及潜在的错误来源)。
发布于 2015-08-20 05:56:27
Oracle和其中一些桌面数据库在SQL方面的差异很小。开发人员是否可以插入自定义代码,以便在运行时根据环境对SQL进行一些轻量级的动态剥离(例如,删除表空间指定)?
与依赖每个开发人员手动保持两组SQL同步相比,我更喜欢这种方法。
https://stackoverflow.com/questions/13609742
复制相似问题