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 的迁移前和迁移后脚本的主要内容,如果未能解决你的问题,请参考以下文章