检测到已解决的迁移未应用于 flyway 上的数据库
Detected resolved migration not applied to database on flyway
我们正在使用 flyway 来管理数据库架构版本,但我们遇到了问题。由于我们作为一个团队工作并使用 git 作为我们的源代码管理,因此在某些情况下,不同的人会在他们自己的本地 repo 上更新数据库架构。如果发生这种情况,我们将得到
Detected resolved migration not applied to database: 2016.03.17.16.46"
时间“2016.03.17.16.46”是别人添加的,我已经应用了比那个时间晚的时间戳。如果发生这种情况,我们必须清理所有数据库表并重新创建它们。我们已尝试在 validateOnMigrate
上设置 false 并做了 flywayClean
,但没有任何帮助。还有其他方法可以改变吗?
迁移选项 outOfOrder
是您的朋友。将其设置为 true 以允许在事后插入这些迁移。
在命令行中,运行:
flyway -outOfOrder=true migrate
或者如果您使用 Maven 插件:
mvn -Dflyway.outOfOrder=true flyway:migrate
我在从一个 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
只需添加 spring.flyway.ignore-missing-migrations=true
如果您使用 spring-boot.
到您的属性文件
这将忽略以前的迁移。
就我而言,我只是将我的迁移文件重命名为其他名称,然后再重命名回来——只是为了更新文件的修改日期。它奏效了。
如果您想在启动应用程序时应用迁移,也可以将其放入 application.properties
文件中:
spring.flyway.out-of-order=true
在我的例子中,数据库中存在版本为 319 的行,而 319 对应的文件已重命名为 do 330,因此数据库注册表找不到对应的文件。从数据库中删除行解决了问题。
outOfOrder
没有为我们解决问题。
两个迁移在一个部署中被删除之前。
因此,我们将这些迁移添加回去并撤消了另一个迁移中的更改。
工作
我们正在使用 flyway 来管理数据库架构版本,但我们遇到了问题。由于我们作为一个团队工作并使用 git 作为我们的源代码管理,因此在某些情况下,不同的人会在他们自己的本地 repo 上更新数据库架构。如果发生这种情况,我们将得到
Detected resolved migration not applied to database: 2016.03.17.16.46"
时间“2016.03.17.16.46”是别人添加的,我已经应用了比那个时间晚的时间戳。如果发生这种情况,我们必须清理所有数据库表并重新创建它们。我们已尝试在 validateOnMigrate
上设置 false 并做了 flywayClean
,但没有任何帮助。还有其他方法可以改变吗?
迁移选项 outOfOrder
是您的朋友。将其设置为 true 以允许在事后插入这些迁移。
在命令行中,运行:
flyway -outOfOrder=true migrate
或者如果您使用 Maven 插件:
mvn -Dflyway.outOfOrder=true flyway:migrate
我在从一个 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
只需添加 spring.flyway.ignore-missing-migrations=true
如果您使用 spring-boot.
这将忽略以前的迁移。
就我而言,我只是将我的迁移文件重命名为其他名称,然后再重命名回来——只是为了更新文件的修改日期。它奏效了。
如果您想在启动应用程序时应用迁移,也可以将其放入 application.properties
文件中:
spring.flyway.out-of-order=true
在我的例子中,数据库中存在版本为 319 的行,而 319 对应的文件已重命名为 do 330,因此数据库注册表找不到对应的文件。从数据库中删除行解决了问题。
outOfOrder
没有为我们解决问题。
两个迁移在一个部署中被删除之前。
因此,我们将这些迁移添加回去并撤消了另一个迁移中的更改。
工作