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

时间:2016-03-18 06:40:24

标签: database flyway

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

  

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

时间" 2016.03.17.16.46"是由另一个人添加的,我已经比那个时间晚了一些时间戳。如果发生这种情况,我们必须清理所有数据库表并再次创建它们。我们尝试在validateOnMigrate上设置为false并执行flywayClean,但没有任何帮助。有没有其他方法可以改变它?

8 个答案:

答案 0 :(得分:28)

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

答案 1 :(得分:5)

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

spring.flyway.out-of-order=true

答案 2 :(得分:1)

只需添加spring.flyway.ignore-missing-migrations=true 如果您使用的是Spring-boot,请访问属性文件。

这将忽略以前的迁移。

答案 3 :(得分:0)

从一个git分支切换到另一个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/commandline/migrate#ignoreMissingMigrations

答案 4 :(得分:0)

可能是因为订单

添加 在application.properties上

flyway.out-of-order = true

或 春天的application.yml

flyway:
  out-of-order: true

答案 5 :(得分:0)

就我而言,我只是将迁移文件重命名为其他名称,然后又重命名了该文件–只是为了更新文件的修改日期。而且有效。

答案 6 :(得分:0)

就我而言,数据库中存在版本为 319 的行,并且 319 的对应文件重命名为 do 330,因此数据库注册表找不到相应的文件。从数据库中删除该行解决了问题。

答案 7 :(得分:-2)

..或者您只需清洁flyway_schema_history表并再次清洁bootrun

确保您的SQL序列都是幂等的。

然后,在下一次启动中,您将看到以下几行日志:

o.f.c.i.s.DefaultSqlScriptExecutor       : DB: relation "transaction_attempt" already exists, skipping (SQL State: 42P07 - Error Code: 0)
o.f.c.i.s.DefaultSqlScriptExecutor       : DB: relation "provider" already exists, skipping (SQL State: 42P07 - Error Code: 0)

不要忘记在生产环境中转储数据。