DB マイグレーションツール Flyway で fail したときのメモ

最近プロジェクトに DB マイグレーションツールであるところの、 flyway を導入しました。

SQL ベースで DB の状態を管理していくので、特定の O/R マッパーに依存することもなく、プロジェクトが走り出してからさくっと導入するぶんには特に問題も起こりませんでした。

そんななか migratefail したときに少々困ったのでメモ。

fail するとどうなるか

fail するとこんな感じでエラーメッセージが表示されて処理が停止します。

1
2
3
4
5
6
7
$ ./flyway.sh migrate
Flyway (Command-line Tool) v.2.2.1

Current version of schema `HOGEDB`: 3.1
Migrating schema `HOGEDB` to version 3.2
ERROR: com.googlecode.flyway.core.api.FlywayException: Migration of schema `HOGEDB` to version 3.5 failed! Please restore backups and roll back database and code!
以下エラー文

schema_version テーブルを見てみると、 version0 になっているレコードが挿入されていました。この状態ではいくら migrate コマンドを実行してもマイグレーションは行なわれません。

repair してあげよう

以下のように repair コマンドを実行することで、 success0 なレコードが取り除かれ、 migrate コマンドを実行できるようになります。もちろん migrate コマンドを実行する前に DB や SQL に起こっている問題は解消しておきましょう。

1
2
3
4
5
$ ./flyway.sh repair
Flyway (Command-line Tool) v.2.2.1

Metadata table `HOGEDB`.`schema_version` successfully repaired (execution time 00:00.001s).
Manual cleanup of the remaining effects the failed migration may still be required.

migrate できた。

1
2
3
4
5
6
$ ./flyway.sh migrate
Flyway (Command-line Tool) v.2.2.1

Current version of schema `HOGEDB`: 3.4
Migrating schema `HOGEDB` to version 3.5
Successfully applied 1 migration to schema `HOGEDB` (execution time 00:00.102s).