如何在使用 flywaydb 时对存储过程进行版本控制?
Posted
技术标签:
【中文标题】如何在使用 flywaydb 时对存储过程进行版本控制?【英文标题】:How can I version control Stored Procedures while using flywaydb? 【发布时间】:2014-06-18 10:17:51 【问题描述】:我目前有一个使用 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 代码,因为它过去一直困扰着我们。其他人如何处理这种情况?
【问题讨论】:
【参考方案1】:从 3.0 开始,对此没有一流的支持。然而,有 3 种方法可以实现这一点:
使用自定义的 MigrationResolver 挂钩到您使用的任何源代码控制并以这种方式检测更改 使用 FlywayCallback,通过 afterMigrate 重新创建所有存储过程 在单独的架构中使用单独的 Flyway 实例并将 cleanOnValidationError 设置为 true。每次校验和更改时,都会清理架构并重新运行该 Flyway 实例管理的所有迁移【讨论】:
感谢 axel,我认为 afterMigrate 可能是实现这一点的最简单方法。感谢您的洞察力! Flyway 4.0 来救援! flywaydb.org/documentation/migration/repeatable(通过***.com/a/15835025/25625)以上是关于如何在使用 flywaydb 时对存储过程进行版本控制?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Nexus OSS 代理 https://flywaydb.org/repo 存储库?