当前位置: 首页 > 知识库问答 >
问题:

如何处理更改Flyway迁移?

夔博
2023-03-14

我目前正在研究Flyway作为Liquibase的替代方案,但在文档中无法找到以下问题的答案:

假设在生产环境中部署后发现迁移X包含错误。回想起来,X不应该按原样执行,但已经太晚了。但是,我们想用固定版本的X替换迁移X,这样从头开始填充的数据库就不会遭受相同的错误。

在 Liquibase 中,您将修复原始变更集并使用


共有3个答案

昌博易
2023-03-14

如果这个坏的更改已经达到生产阶段,那么隐藏它有什么意义呢?每次在空数据库上重放都很昂贵吗(我假设CI运行)?在已经包含该迁移的情况下创建一个新的数据库基线。

公良征
2023-03-14

根据混乱的程度,你也可以

  • 只需进行后续迁移来更正它(新列名中的错字,…)
  • 如果这不是一个选项,您必须手动修复迁移和数据库,并发出Flyway.repair()来重新调整校验和http://flywaydb.org/documentation/command/repair.html
朱俊雅
2023-03-14

尽管这违反了Flyway的API,但以下方法对我们很有效:

在Validate之前编写<code>。sql</code>,它修复校验和以匹配预期值,因此当Flyway实际验证校验和时,一切看起来都很好。

例如:

-- The script xyz/V03_201808230839__Faulty_migration.sql was modified to fix a critical bug.
-- However, at this point there were already production systems with the old migration file.
-- On these systems, no additional statements need to be executed to reflect the change,
-- BUT we need to repair the Flyway checksum to match the expected value during the 'validate' command.
UPDATE schema_version
SET checksum = -842223670
WHERE (version, checksum) = ('03.201808230839', -861395806);

这样做的优点是只针对一个特定的迁移,这与 Flyway 的修复命令不同。

 类似资料:
  • 我需要重命名一个Flyway迁移文件。我已经在本地数据库上应用了迁移。 如何删除或重置本地postgres数据库,使其不存在Flyway迁移异常?

  • 我们中的两个人在不同的GIT分支中制作了一个迁移脚本。现在,我已经拉动了源开发分支,并更正了 GIT 合并问题,并将我的迁移脚本重命名为最后一个。因此,数据库的新初始化和从开发分支的版本迁移数据库将是可以的。 然而,我的本地测试数据库中有很多数据,所以我手动应用了我在GIT中引入的新迁移脚本。然而,我不能让flyway认为,一切都很好。 那么,我如何才能伪造迁移? 当我尝试迁移时,我收到以下错误:

  • 我对Flyway完全陌生,但我正在尝试使用https://github.com/flyway/flyway-docker描述的docker-compose flyway mysql安排来迁移许多相同的测试数据库 据我所知,< code>migrate命令可以在它的< code>-schemas参数中接受多个模式,但是它似乎只将实际的SQL迁移应用于列表中的第一个模式。 例如,当我使用< code>

  • 问题内容: MyBatis迁移将每个SQL文件分为两部分: 一种用于向前迁移一个版本 一种用于迁移回一个版本 如何使用Flyway回滚版本? 问题答案: 尽管Flyway支持回滚(仅作为商业功能),但不鼓励使用它: https://flywaydb.org/documentation/command/undo 尽管撤消迁移的想法很好,但不幸的是,有时它在实践中会崩溃。一旦您进行了破坏性的更改(删除

  • 我想知道如何将应用程序/设备通知,如果GCM服务器决定刷新之前从GCM服务器检索的应用程序的注册ID。目前,我保存第一个检索到的注册ID,并将其保存在数据库中,并将此注册ID发送到应用服务器。所以,从下一次应用程序将不会说话的GCM服务器。在这种情况下,应用程序永远不会知道注册ID是否被GCM服务器更改。谷歌文件提出了一些处理此案的建议,但没有提到应该采取什么步骤。引用谷歌- 虽然是com。谷歌。

  • 我们正在尝试将迁移作为.sql文件置于版本控制之下。开发人员将编写一个vn__*.sql文件,提交到版本控制,并且每5分钟运行一次的作业将自动迁移到开发和测试数据库。一旦更改被证明没有引起问题,其他人就会运行一个手动作业来在生产上运行迁移。 我的问题: 我有一个演示迁移,创建了几个表。我将v4__demotable.sql检查到PC上的版本控制中。 阅读文档时,开发人员似乎建议我应该创建一个新的v