我正在使用带有gradle的flyway,我已经在数据库控制台中手动运行了一项迁移,我想运行flyway,但是告诉它忽略所有其他版本之间的一个特定迁移版本。能做到吗?

最佳答案

您必须稍微修改一下才能使其正常工作,所以我不建议您使用这种方法,但是这种方法会在一定程度上起作用。

我只用Maven进行了测试,但是我很确定它也可以在Gradle中使用。


迁移到您手动应用的版本之前的版本

# Assuming you applied 01.002 manually
$ mvn flyway:migrate -Dflyway.target=01.001

为您应用的脚本插入一行

-- Make sure these vals closely replicate those from other rows
insert into schema_version( installed_rank, version, description, type, script, checksum, installed_by, installed_on, execution_time, success)
values ( 2, '01.002', 'static_data', 'SQL', 'V01/V01.002__static_data.sql', null, 'username', current_timestamp, 0, true );

修复schema_version校验和

$ mvn flyway:repair

应用其他迁移

$ mvn flyway:migrate -Dflyway.validateOnMigrate=false -Dflyway.outOfOrder=true



可能不需要两个-D属性,具体取决于您是否正确设置了insert。例如,即使校验和现在正确,Flyway可能也不同意您的脚本描述。

关于flyway - 如何跳过使用flyway的特定迁移?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29012034/

10-12 19:50