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

Pet*_*eti 27 flyway

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

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

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

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

使用Flyway解决这个问题的最佳方法是什么?

Axe*_*ine 36

您可以使用flyway.locations属性.

在测试中看起来像这样:

flyway.locations=sql/common,sql/derby
Run Code Online (Sandbox Code Playgroud)

并在prod:

flyway.locations=sql/common,sql/oracle
Run Code Online (Sandbox Code Playgroud)

然后,您可以在特定于数据库的位置具有公共语句(V1__Create_table.sql)以及特定于DB的语句(V2__Alter_table.sql)的不同副本.

在我看来,更好的解决方案是在生产和测试中使用相同的DB.是的,您确实失去了一些性能,但另一方面,您还消除了环境之间的另一个差异(以及潜在的错误来源).