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のにあります。