我开始使用Flyway
在我的数据库迁移当前的项目,我非常喜欢它。 我目前在测试环境使用Oracle在PROD-和德比。
很快,我在数据库特定的SQL命令,例如问题并运行
-
ALTER TABLE T1 MODIFY F1 VARCHAR(256);
在Oracle VS -
ALTER TABLE T1 ALTER F1 SET DATA TYPE VARCHAR(256);
在德比。
我看不到的方式来写一个“厂商中立的ALTER TABLE修改列数据类型” SQL。
什么是对付使用迁飞这个问题的最好方法是什么?
您可以使用flyway.locations属性。
在测试中是这样的:
flyway.locations=sql/common,sql/derby
在PROD:
flyway.locations=sql/common,sql/oracle
然后,您可以有在特定的DB-位置DB特定语句(V2__Alter_table.sql)的共同和不同副本的共同声明(V1__Create_table.sql)。
一个更好的解决方案,在我看来,是具有相同的DB的督促和测试。 是的,你失去一点的表现,但在另一方面,你也消除环境中的另一个区别(和错误的潜在来源)。
Oracle和一些桌面数据库之间的SQL的差异是次要的。 是否有可能为开发人员能够插入自定义代码在运行时根据环境(例如,删除表空间标识)执行SQL的一些轻量的动态剥离?
我喜欢这种方法依赖于每个开发人员手动保持两套SQL的同步。