我们正在使用flyway来管理数据库架构版本,我们正面临一个问题。由于我们作为一个团队工作并使用git作为我们的源代码管理,因此在某些情况下,不同的人会在他们自己的本地存储库上更新数据库模式。如果发生这种情况,我们会得到
检测到未应用于数据库的已解决迁移:2016.03.17.16.46"
时间" 2016.03.17.16.46"是由另一个人添加的,我已经比那个时间晚了一些时间戳。如果发生这种情况,我们必须清理所有数据库表并再次创建它们。我们尝试在validateOnMigrate
上设置为false并执行flywayClean
,但没有任何帮助。有没有其他方法可以改变它?
答案 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)
不要忘记在生产环境中转储数据。