如何使用flyway跳过特定的迁移?

时间:2015-03-12 14:09:52

标签: flyway

我使用flyway和gradle,我在数据库控制台中手动运行了一次迁移,我想运行flyway,但要告诉它忽略所有其他迁移版本。可以这样做吗?

2 个答案:

答案 0 :(得分:9)

你必须先破解它才能让它发挥作用,所以我不推荐这种方法,但它会起作用。

我只用Maven测试了这个,但我很确定它也适用于Gradle。

  1. 向上迁移到您手动应用的版本之前的版本

    # Assuming you applied 01.002 manually
    $ mvn flyway:migrate -Dflyway.target=01.001
    
  2. 为您应用的脚本插入一行

    -- 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 );
    
  3. 修复schema_version校验和

    $ mvn flyway:repair
    
  4. 应用其他迁移

    $ mvn flyway:migrate -Dflyway.validateOnMigrate=false -Dflyway.outOfOrder=true
    
  5. 可能没有必要使用两个-D属性,具体取决于您是否正确insert。例如,Flyway可能不同意您的脚本描述,即使校验和现在是正确的。

答案 1 :(得分:0)

不推荐但如果您仍想:

1)运行flywayMigrate,让迁移失败 2)手动更新该特定迁移版本的flyway元表(成功列) 3)再次运行flywayMigrate 4)完成后,flyway将从下一版本的迁移开始。