Flyway 的迁移前和迁移后脚本

Posted

技术标签:

【中文标题】Flyway 的迁移前和迁移后脚本【英文标题】:Pre- and Post-migration scripts for Flyway 【发布时间】:2011-11-05 09:11:26 【问题描述】:

我正在寻找一种在迁移前后执行挂钩脚本的方法。 我有一堆视图和存储过程,希望这个过程是:

    删除所有视图和存储过程。 运行迁移。 重建视图和存储过程。

这可确保对架构的任何更改都反映在相关视图和存储过程中。步骤 (1) 和 (3) 将是 bash 脚本。

这在 Flyway 中可行吗?

【问题讨论】:

【参考方案1】:

2014 年 4 月 29 日更新: 现在,通过实现 FlywayCallback 接口,Flyway 3.0 可以实现这一点。

上一个答案

简短的回答是:不,目前还没有。

原因如下:我在制定 Flyway 的初始设计时考虑了这一点。不过,我对这方面考虑得越多,我就越清楚这些 pre 和 post 脚本也是迁移的一个组成部分,或者至少是迁移离不开的东西想要成功。因此,我建议:

在一次迁移中合并 1、2 和 3 有 3 个单独的迁移 x.1(删除视图)、x.2(实际迁移)、x.3(重建视图)

如果重复这些步骤,您甚至可以让 x.1 和 x.3 调用存储过程来为您完成工作以避免迁移之间的代码重复。

让 Flyway 负责执行对数据库结构的所有更改,这使得整个事情变得更加简单,避免了不同技术的混合。

【讨论】:

我希望有这个内置并由 Flyway 配置控制。基本上有一个 pre、migrate 和 post 目录结构,Flyway 执行 pre 中的任何内容,然后执行 migrate 中的内容,然后执行 post 内容。我还是 Flyway 的新手,所以我可能会发现我的评论很垃圾。 我也觉得这很有用,虽然我需要使用 sql 而不是 sh 脚本。 仍然希望你有这样的东西。在迁移到例如将同义词指向正确的架构之后,我必须手动运行一组 SQL 脚本。 我不明白您为什么不将“指向模式的同义词”设置为 flyway 脚本?对于单元测试,我通常会错过截断所有表的选项。这将是迁移后脚本的用例(它不能是 flyway 脚本,因为如果架构是最新版本,它将不会运行)。【参考方案2】:

扩展Axel's response:带有sql脚本的回调仅仅意味着将beforeMigrate.sql(例如,这是其中一个关键字)放在包含迁移的目录中,Flyway将在其他迁移脚本之前执行beforeMigrate.sql .甚至在 schema_version 被锁定之前。

其他回调名称(例如afterMigrate)列在documentation for callbacks中。

【讨论】:

以上是关于Flyway 的迁移前和迁移后脚本的主要内容,如果未能解决你的问题,请参考以下文章

基于 State/BaselineMigration 脚本的迁移后 FlyWay 迁移出错

最佳实践:使用后如何修改flyway迁移脚本

flyway迁移后运行data.sql文件

FlyWay 迁移脚本

Flyway 未接收 Java 迁移

Flyway 最佳实践:一个大型迁移脚本与多个增量脚本