2016-06-15 8 views
1

私のプロジェクトpostgres databaseflyway:migrateを実行しようとしていました。私は手動でテーブルを変更しました。そのため、飛行機を使用したスキーマの移行は失敗し、次のスキーマ移行の実行がブロックされています。失敗したmvnフライウェイを強制的にスキップ:スキーマ移行にスキップし、次のスキーマを実行してみよう

table : foo 

required_change : ALTER TABLE foo ALTER COLUMN id DROP NOT NULL 

current_schema_version : 2 

next_schema_version : 3 

エラー:

[ERROR] com.googlecode.flyway.core.api.FlywayException: Migration of schema "public" to version 3 failed! Changes successfully rolled back. 

どのように私は失敗したスキーマをスキップしてflyway:migrateは、次のスキーマが定義されて実行させることができますか?

答えて

1

手動での変更を元に戻して、Flywayを正常に実行できる場合があります。たとえば、列を削除した後、列を追加してから、Flywayスクリプトを実行してドロップします。

0

だから私は、次のようになっている、この問題に対する一つの可能​​な解決策を見つけた:

(1)。 mysqlデータベースにはテーブルschema_versionがあり、移行バージョン番号、ステータス、その他の関連情報が保持されます。例:

mysql> desc schema_version;


installed_rank バージョン上書きに失敗したマイグレーション成功フィールド値を格納0

installed_on execution_time 成功

installed_by
説明
タイプ
スクリプト
サム
をversion_rankそれと実行ファイル次のフライウェイ:マイグレーションでは、手動で値を1に設定できます(マイグレーションが失敗したときに手動で作成したテーブルに保存されているデータが失われないことを確認します)。

(2)。 flywayを実行している間、あなたのpom.xmlに次を追加する:一時的な移行(テスト中)も役に立ちます。

<validateOnMigrate>false</validateOnMigrate>

関連する問題