使用docker容器从6.3.1到8.5.x的flyway版本迁移问题



团队,

我们已经为postgresql11.x版本工作了flywaydocker镜像(flywaycommunityeditionversion6.x(设置。在将我们的postgresql版本升级到14.x之后,现在现有的flyway迁移脚本(更新了社区版本8.x(失败了,并出现"错误:验证失败:迁移验证失败">错误。

- ingestionTime: 1665114622336
message: Flyway Community Edition 8.4.1 by Redgate
timestamp: 1665114621897
- ingestionTime: 1665114622336
message: 'Database: jdbc:postgresql://aws-rds-dev:5432/myapp (PostgreSQL 14.4)'
timestamp: 1665114621898
- ingestionTime: 1665114622336
message: 'ERROR: Validate failed: Migrations have failed validation'
timestamp: 1665114622186
- ingestionTime: 1665114622336
message: 'Detected applied migration not resolved locally: create trigger to update universal table. If you removed this migration intentionally, run repair to mark the migration as deleted.'
timestamp: 1665114622186

如果我们升级postgresql数据库,有没有关于如何迁移版本模式表项的文档?

非常感谢在这方面的任何帮助。

提前谢谢。。

这是Flyway V7中引入的更改的结果。在V7之前,丢失的可重复迁移被忽略,不会导致验证错误,在V7之后,它们不再被忽略

要解决此问题并保留以前的行为,您需要设置ignoreMigrationPatterns="*:missing",这将防止丢失的迁移引发验证错误。你可以在这里找到这个参数的文档

值得注意的是,默认情况下不会忽略丢失的迁移,因为不建议删除迁移,因为这会影响数据库的可复制性。如果您确实想删除迁移,那么运行repair在模式历史表中将其标记为deleted将是的首选选项

除了公认的答案(我想知道为什么官方文档没有解释这一点(:我发现很难学习如何触发repair,所以我在Spring Boot项目中所做的是用以下方法创建一个@Configuration类:

@Bean
@Profile(SpringProfile.MS_SQL)
public FlywayMigrationStrategy repairBeforeMigrateStrategy() {
return flyway -> {
flyway.repair();
flyway.migrate();
};
}

其余的飞行通道选项在我们的项目中通过application.yml文件进行配置。

最新更新