如何在使用flywaydb时对版本控制存储过程进行版本控制?

我目前有一个使用Microsoft SQL Server后端的Java Web应用程序。 数据库迁移当前由sqlcmd手动完成,它使用:r命令引用存储过程和视图的脚本文件。

这样,每个存储过程都有自己的文件“proc_someprocedure.sql”。迁移由升级脚本“6.1 upgrade.sql”完成,该脚本将proc文件放弃并在其当前版本中重新创建。

我们希望迁移到flyway并让应用程序在部署时迁移它自己的数据库。 但是,我找不到任何简单的方法来为每个存储过程维护单个源代码文件。 如果存储过程发生更改,我需要在版本控制中对V_6_1__change.sql文件和proc_someprocedure.sql文件进行更改。

我正在尝试避免复制/粘贴的sql代码,因为它在过去困扰我们。其他人如何处理这种情况?

从3.0开始,没有一流的支持。 然而,有3种方法可以实现这一目标:

  • 使用自定义MigrationResolver挂接到您使用的任何源控件并以这种方式检测更改
  • 使用FlywayCallback,使用afterMigrate重新创建所有存储过程
  • 在单独的模式中使用单独的Flyway实例,并将cleanOnValidationError设置为true。 每次校验和更改时,都将清除架构,并重新运行由该Flyway实例管理的所有迁移