31

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

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

  • ALTER TABLE T1 MODIFY F1 VARCHAR(256);在甲骨文与
  • ALTER TABLE T1 ALTER F1 SET DATA TYPE VARCHAR(256);在德比上。

我看不到编写“供应商中立的更改表修改列数据类型”sql 的方法。

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

4

2 回答 2

40

您可以使用 flyway.locations 属性。

在测试中看起来像这样:

flyway.locations=sql/common,sql/derby

并在产品中:

flyway.locations=sql/common,sql/oracle

然后,您可以在特定于 db 的位置中拥有特定于 DB 的语句 (V2__Alter_table.sql) 的通用和不同副本中的通用语句 (V1__Create_table.sql)。

在我看来,更好的解决方案是在产品和测试中使用相同的数据库。是的,您确实损失了一些性能,但另一方面,您也消除了环境之间的另一个差异(和潜在的错误来源)。

于 2012-11-29T08:16:41.253 回答
0

Oracle 和其中一些桌面数据库之间的 SQL 差异很小。开发人员是否可以根据环境插入自定义代码以在运行时对 SQL 进行一些轻量级的动态剥离(例如删除表空间指定)?

我更喜欢这种依赖每个开发人员手动保持两组 SQL 同步的方法。

于 2015-08-19T21:56:26.907 回答