检测到的已解决迁移未应用于 flyway 上的数据库

Posted

技术标签:

【中文标题】检测到的已解决迁移未应用于 flyway 上的数据库【英文标题】:Detected resolved migration not applied to database on flyway 【发布时间】:2016-07-04 19:36:54 【问题描述】:

我们正在使用 flyway 来管理数据库架构版本,我们遇到了一个问题。由于我们作为一个团队工作并使用 git 作为我们的源代码管理,因此在某些情况下,不同的人会在他们自己的本地 repo 上更新数据库模式。如果发生这种情况,我们会得到

检测到已解决的迁移未应用于数据库:2016.03.17.16.46"

时间“2016.03.17.16.46”是由另一个人添加的,我已经应用了比那个时间更晚的时间戳。如果发生这种情况,我们必须清理所有数据库表并重新创建它们。我们试图在validateOnMigrate 上设置 false 并做了flywayClean,但没有任何帮助。还有其他方法可以改变吗?

【问题讨论】:

【参考方案1】:

迁移选项outOfOrder 是您的朋友。将其设置为 true 以允许在事后插入这些迁移。

在命令行上,运行:

flyway -outOfOrder=true migrate

或者如果你使用 Maven 插件:

mvn -Dflyway.outOfOrder=true flyway:migrate

【讨论】:

如何在行动中做到这一点? flyway -outOfOrder=true migrate 请注意,并非所有迁移都可以乱序执行。例如,创建表 'foo' 并将列 'bar' 添加到表 'foo'。 -Dflyway.outOfOrder=true【参考方案2】:

从一个 git 分支切换到另一个分支并尝试运行时,我遇到了类似的问题 flyway:migrate。 例如,当我在分支'release_4.6.0'上时,我的本地计算机上没有从分支'release_4.7.0'迁移,所以 我收到下一个错误 FlywayException: Validate failed: Detected applied migration not resolved locally。 对我有用的解决方案是将ignoreMissingMigrations flyway 选项设置为true。 在 Maven 中它看起来像

flyway:migrate -Dflyway.ignoreMissingMigrations=true

也许这不是这个问题的答案,但它可以帮助那些和我遇到同样问题的人。

在这里您可以找到更多详细信息: https://flywaydb.org/documentation/configuration/parameters/ignoreMissingMigrations

【讨论】:

为我工作,但看起来迁移在其他框架和 flyway 中的工作方式存在一些概念差异。【参考方案3】:

如果您想在启动应用程序时应用迁移,也可以将其放入您的 application.properties 文件中:

spring.flyway.out-of-order=true

【讨论】:

【参考方案4】:

只需添加spring.flyway.ignore-missing-migrations=true 如果您使用的是 spring-boot,则添加到您的属性文件中。

这将忽略以前的迁移。

【讨论】:

【参考方案5】:

就我而言,我只是将我的迁移文件重命名为其他名称,然后将其重命名——只是为了更新文件的修改日期。它奏效了。

【讨论】:

【参考方案6】:

在我的情况下,数据库中存在版本为 319 的行,并且 319 的相应文件被重命名为 do 330,因此数据库注册表找不到相应的文件。从数据库中删除行解决了这个问题。

【讨论】:

以上是关于检测到的已解决迁移未应用于 flyway 上的数据库的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 应用程序在启动时未运行 Flyway 迁移

SpringBoot数据库管理 - 用flyway对数据库管理和迁移

实战Flyway迁移指南最佳实践

现有数据库上的 flyway 迁移导致“列中遇到错误的列类型”

Flyway 未接收 Java 迁移

Java基础学习总结(183)—— Flyway 在项目中迁移数据实践