我可以在不重新运行迁移的情况下修复 Flyway 中的版本号吗?

Posted

技术标签:

【中文标题】我可以在不重新运行迁移的情况下修复 Flyway 中的版本号吗?【英文标题】:Can I fix version numbers in Flyway without having migrations rerun? 【发布时间】:2020-04-16 20:17:53 【问题描述】:

我们设置了多个版本控制不正确的迁移。文件名将版本放在描述中,因此 db 始终为版本 0。我们想重命名它们,但这会导致所有脚本重新运行。

目前,我们的文件命名为V__001_The_First_Migration.sql

我们希望在不重新运行迁移的情况下将它们重命名为 V001__The_First_Migration.sql

有没有办法做到这一点?

【问题讨论】:

只需为将来的迁移修复它,否则您将不得不手动干预任何现有数据库。 有多少迁移脚本有错误的命名问题?太多?如果这些很少,我可以建议一种可能需要触发更新查询的解决方案。 @MehulGayate,不幸的是,它远远超过 100 个。有些脚本有 CREATE TABLE IF NOT EXISTS 这样的保护措施,但将所有这些都到位的努力会很昂贵。 如果每个脚本的版本实际上都是 0,你是如何做到这一点的? 【参考方案1】:

我认为在 FlyWay 配置中,有一个属性会有所帮助:

flyway.baselineVersion=1.0

重命名所有文件或要重命名的文件,并将“baselineVersion”设置为上次运行或最新的脚本。

这里有更多: https://flywaydb.org/documentation/commandline/baseline

https://flywaydb.org/documentation/maven/baseline

如果您需要更多帮助或示例,请告诉我。

【讨论】:

以上是关于我可以在不重新运行迁移的情况下修复 Flyway 中的版本号吗?的主要内容,如果未能解决你的问题,请参考以下文章

Flyway 可重复迁移 - 在版本化迁移之前执行?

Room 无法验证数据完整性。如何在不编写迁移步骤的情况下修复它?

使用 Spring Boot 进行 Flyway 修复

当不需要迁移时,如何让 flyway.cmd 使构建失败?

在 Django 中,您可以在不总是生成迁移的情况下运行种子数据吗?

创建 jpa 表后的 Flyway 迁移