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

q43xntqr  于 2023-04-05  发布在  PostgreSQL
关注(0)|答案(2)|浏览(166)

团队,
我们已经为postgresql 11.x版本设置了工作的flyway docker镜像(flyway社区版版本6.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数据库,如何迁移版本模式表项?
在这方面的任何帮助高度赞赏。
感谢您的评分

jdgnovmf

jdgnovmf1#

这是Flyway V7中引入的更改的结果。在V7之前,丢失的可重复迁移被忽略,不会导致验证错误,而在V7之后,它们不再被忽略
要解决这个问题并保留以前的行为,您需要设置ignoreMigrationPatterns="*:missing",这将防止missing migrations抛出验证错误。
值得注意的是,默认情况下不会忽略丢失的迁移,因为不建议删除迁移,因为这会影响数据库的可重复性。如果您确实打算删除迁移,则运行repair将其在架构历史表中标记为deleted将是首选选项

dl5txlt9

dl5txlt92#

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

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

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

相关问题