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

Ima*_*man 16 flyway

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

par*_*rds 13

你不得不破解它以使其工作,所以我不建议这种方法,但它会在一个紧张的工作.

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

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

    # Assuming you applied 01.002 manually
    $ mvn flyway:migrate -Dflyway.target=01.001
    
    Run Code Online (Sandbox Code Playgroud)
  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 );
    
    Run Code Online (Sandbox Code Playgroud)
  3. 修复schema_version校验和

    $ mvn flyway:repair
    
    Run Code Online (Sandbox Code Playgroud)
  4. 应用其他迁移

    $ mvn flyway:migrate -Dflyway.validateOnMigrate=false -Dflyway.outOfOrder=true
    
    Run Code Online (Sandbox Code Playgroud)

这两个-D属性可能没有必要,这取决于你是否insert正确.例如,即使校验和现在正确,Flyway也可能不同意您的脚本描述.


Sag*_*uja 9

不推荐,但如果您仍然想要:

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


Jus*_*mmo 1

从版本 7 开始,您可以将其直接添加到 Maven 或 Grade 文件中

Gradle - 跳过

flyway {
     skipExecutingMigrations = true
}
Run Code Online (Sandbox Code Playgroud)

Maven - 跳过

<configuration>
     <skipExecutingMigrations>true</skipExecutingMigrations>
</configuration>
Run Code Online (Sandbox Code Playgroud)

文档参考跳过

Gradle - 樱桃挑选

flyway {
     cherryPick = '2.0'
}
Run Code Online (Sandbox Code Playgroud)

Maven - 樱桃挑选

<configuration>
     <cherryPick>2.0</cherryPick>
</configuration>
Run Code Online (Sandbox Code Playgroud)

文档参考 Cherry Pick

  • 请注意,参数“skipExecutingMigrations”是 Teams 版本功能。这意味着您必须付费才能使用此功能。 (2认同)