Flywayを使用した移行のロールバック
1. 序章
この短いチュートリアルでは、Flywayを使用して移行をロールバックするいくつかの方法について説明します。
2. 移行によるロールバックのシミュレーション
このセクションでは、標準の移行ファイルを使用してデータベースをロールバックします。
この例では、Flywayのコマンドラインバージョンを使用します。 ただし、コア原則は、コアAPI、Mavenプラグインなどの他の形式にも同様に適用できます。
2.1. 移行の作成
まず、新しいbookテーブルをデータベースに追加しましょう。 これを行うために、V1_0__create_book_table.sqlという名前の移行ファイルを作成します。
create table book (
id numeric,
title varchar(128),
author varchar(256),
constraint pk_book primary key (id)
);
次に、移行を適用しましょう。
./flyway migrate
2.2. ロールバックをシミュレートする
次に、ある時点で、最後の移行を元に戻す必要があると言います。
book テーブルが作成される前にデータベースを復元するために、V2_0__drop_table_book.sqlという名前の移行を作成しましょう。
drop table book;
次に、移行を適用しましょう。
./flyway migrate
最後に、以下を使用してすべての移行の履歴を確認できます。
./flyway info
これにより、次の出力が得られます。
+-----------+---------+-------------------+------+---------------------+---------+
| Category | Version | Description | Type | Installed On | State |
+-----------+---------+-------------------+------+---------------------+---------+
| Versioned | 1.0 | create book table | SQL | 2020-08-29 16:07:43 | Success |
| Versioned | 2.0 | drop table book | SQL | 2020-08-29 16:08:15 | Success |
+-----------+---------+-------------------+------+---------------------+---------+
2番目の移行が正常に実行されたことに注意してください。
Flywayに関する限り、2番目の移行ファイルは単なる別の標準移行です。 データベースの以前のバージョンへの実際の復元は、完全にSQLを介して行われます。 たとえば、この場合、テーブルを削除するSQLは、テーブルを作成する最初の移行の反対です。
この方法を使用すると、監査証跡は、バージョン番号が異なるため、2番目の移行が最初のに関連していることを示しません。 このような監査証跡を取得するには、FlywayUndoを使用する必要があります。
3. FlywayUndoの使用
まず、 Flyway UndoはFlywayの商用機能であり、Community Editionでは使用できないことに注意してください。したがって、この機能を使用するには、ProEditionまたはEnterpriseEditionのいずれかが必要です。 。
3.1. 移行ファイルを作成する
まず、V1_0__create_book_table.sqlという名前の移行ファイルを作成しましょう。
create table book (
id numeric,
title varchar(128),
author varchar(256),
constraint pk_book primary key (id)
);
次に、対応するUNDO移行ファイルU1_0__create_book_table.sqlを作成しましょう。
drop table book;
元にたりの移行では、filename-prefixが「V」の通常の移行プレフィックスと比較して「U」であることに注意してください。 また、元に戻る移行ファイルでは、対応する移行ファイルの変更を元に戻すSQLを記述します。 この例では、通常の移行によって作成されたテーブルを削除しています。
3.2. 移行を適用する
次に、移行の現在の状態を確認しましょう。
./flyway -pro info
これにより、次の出力が得られます。
+-----------+---------+-------------------+------+--------------+---------+----------+
| Category | Version | Description | Type | Installed On | State | Undoable |
+-----------+---------+-------------------+------+--------------+---------+----------+
| Versioned | 1.0 | create book table | SQL | | Pending | Yes |
+-----------+---------+-------------------+------+--------------+---------+----------+
最後の列Undoableに注目してください。これは、Flywayが通常の移行ファイルに付随するUNDO移行ファイルを検出したことを示しています。
次に、移行を適用しましょう。
./flyway migrate
完了すると、移行が完了し、スキーマに新しいブックテーブルが追加されます。
List of relations
Schema | Name | Type | Owner
--------+-----------------------+-------+----------
public | book | table | baeldung
public | flyway_schema_history | table | baeldung
(2 rows)
3.3. 最後の移行をロールバックする
最後に、コマンドラインを使用して最後の移行を元に戻しましょう。
./flyway -pro undo
コマンドが正常に実行されたら、移行のステータスを再度確認できます。
./flyway -pro info
これにより、次の出力が得られます。
+-----------+---------+-------------------+----------+---------------------+---------+----------+
| Category | Version | Description | Type | Installed On | State | Undoable |
+-----------+---------+-------------------+----------+---------------------+---------+----------+
| Versioned | 1.0 | create book table | SQL | 2020-08-22 15:48:00 | Undone | |
| Undo | 1.0 | create book table | UNDO_SQL | 2020-08-22 15:49:47 | Success | |
| Versioned | 1.0 | create book table | SQL | | Pending | Yes |
+-----------+---------+-------------------+----------+---------------------+---------+----------+
元に戻すがどのように成功し、最初の移行が保留に戻っているかに注目してください。 また、最初の方法とは対照的に、監査証跡には、ロールバックされた移行が明確に示されます。
Flyway Undoは便利ですが、移行全体が成功したと想定します。たとえば、移行が途中で失敗した場合、期待どおりに機能しない可能性があります。
4. 結論
この短いチュートリアルでは、標準の移行を使用してデータベースを復元する方法について説明しました。 また、FlywayUndoを使用して移行をロールバックする公式の方法についても説明しました。 いつものように、このチュートリアルに関連するすべてのコードは、GitHubのにあります。