web-dev-qa-db-ja.com

フライウェイで特定の移行をスキップする方法は?

私はgradleでflywayを使用しています。データベースコンソール内で手動で移行の1つを実行しました。flywayを実行したいのですが、他のすべての間の特定の移行バージョンを無視するように指示します。これはできますか?

17
Iman

動作させるには少しハックする必要があるので、このアプローチはお勧めしませんが、ピンチで動作します。

私はこれを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
    

insertが正しいかどうかによっては、そこにある2つの-Dプロパティは必要ない場合があります。たとえば、チェックサムが正しい場合でも、Flywayはスクリプトの説明と一致しない場合があります。

14
pards

推奨されませんが、それでも必要な場合:

1)flywayMigrateを実行し、移行を失敗させます。
2)手動で、その特定のバージョンの移行用にフライウェイメタテーブル(成功列)を更新します。
3)flywayMigrateを再度実行します。
4)完了しました。フライウェイは、次のバージョンの移行で開始されます。

1
Sagar Ahuja