【问题标题】:How to change flyway migration file that were applied a while ago?如何更改前一段时间应用的flyway迁移文件?
【发布时间】:2020-02-05 22:31:28
【问题描述】:

问题:我们有 2 个迁移文件,它们使用 postgres DB 中的函数创建了表。这些表是在一年前创建的,之后我们进行了许多新的迁移。 根据我们的新标准,我们禁止表名中的单词。

示例:我们不允许将转发表命名为“_audit”。创建的表名为“abc_audit”和“def_audit”。

禁止“_audit”嵌入在创建表的最新函数中。我们不能只更改表名,因为 docker 会启动整个新数据库并运行所有迁移文件,并且只考虑阻止“_audit”表名的最新函数 并且原始迁移失败。

我们如何解决这个问题?我们不想重新设置基线并丢失历史记录。

【问题讨论】:

  • 让我看看我是否正确理解了您的问题。当您运行 Flyway Migrate 时,脚本将像这样运行: 1:创建具有 '__audit' 约定的表的迁移。 2:具有检查命名功能的版本化迁移。 3:失败。
  • 否,V1 已创建表 ddl 并为其授予角色,并且授予角色通过此脚本中调用的函数运行。我们更改了底层函数,因此对于 docker,它运行 V1 脚本但调用了最新版本的函数,这导致了失败。

标签: migration flyway postgres-9.6


【解决方案1】:

听起来您需要将此命名合规功能纳入版本控制。

  • 从数据库中删除函数
  • 创建用于创建函数的版本化迁移
  • 为新迁移提供一个版本,以便它以正确的顺序运行
    • 如果您有V1__abc_audit.sqlV2__def_audit.sql,后跟V3__something_else.sql,请将您的新迁移命名为V2_1__naming_function.sql

现在这个函数只存在于部署的一部分,在部署了不合规的表之后。

对于现有的 Flyway 部署,我建议使用 'out of order' 配置选项。您可以执行以下操作:

  • 从数据库中删除函数
  • flyway.outOfOrder 设置为true
  • 运行迁移

“乱序”选项意味着 Flyway 将以正确的顺序运行新迁移,尽管它的版本低于当前部署的版本。

【讨论】:

    猜你喜欢
    • 2014-03-07
    • 2021-06-23
    • 2014-07-12
    • 2018-10-28
    • 2011-11-05
    • 2014-05-14
    • 2015-06-27
    • 2021-01-16
    • 2021-04-13
    相关资源
    最近更新 更多