检测到的已解决迁移未应用于 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对数据库管理和迁移