「Flyway昔使ったけど、使い方を忘れた。。」
「Flywayって何?」
みたいな状況から、なるべく簡単に概要を把握して、基本的な使い方なら大丈夫!となれることを目指しています。
※本ページはプロモーションが含まれています。
Flywayの概要をなるべく簡単に掴む。
Flywayは、「データベースのバージョン管理ツール」の1つです。Flywayを通して、DDLやDMLを適用していくことでバージョン管理していくことができます。
特徴としては、以下の2つ。
- 多種多様なDBに対応
- CLIやJava API、Maven/Gradleのプラグインで使用可能
データベースマイグレーションツールってなぜ利用するの?ってところですが、利用することで以下の課題を解決することができます。ご参考まで。
- データベースを再作成可能にする。
- データベースの状態を常に把握する。
- どのスクリプトがDBに適用されているか知ることができる。
Flywayでマイグレートするまでの実際の流れ
Flywayの使い方を実際の流れから紹介していきます。
サンプルはこちら
1.Flywayの初期設定を行う。(conf/flyway.conf)
今回は、必要最低限の設定をします。DBへの接続情報、管理するSQLファイルの格納パス。
...
# DBへの接続URL
flyway.url=jdbc:postgresql://[ホスト名orIP]:[ポート]/[DB名]
# DBに接続するユーザーとパスワード
flyway.user=postgres
flyway.password=postgres
# 管理するSQLファイルを格納するパス
flyway.locations=filesystem:sql
...
2.FlywayからDBに繋がるか確認する。
$ flyway info
Flyway is up to date
Flyway Community Edition 8.5.10 by Redgate
See what's new here: https://flywaydb.org/documentation/learnmore/releaseNotes#8.5.10
Database: jdbc:postgresql://db:5432/work (PostgreSQL 12.7)
Schema version: 4
+-----------+---------+-----------------------+----------+---------------------+----------+
| Category | Version | Description | Type | Installed On | State |
+-----------+---------+-----------------------+----------+---------------------+----------+
+-----------+---------+-----------------------+----------+---------------------+----------+
flyway info
コマンドでは、マイグレーションの履歴などを確認することができます。
3.ベースラインを作成する。
FlywayでDDLなどを適用していくためには、まずベースラインを作成します(Flywayで管理を始める基準ようなもの)。
$ flyway baseline
Flyway is up to date
Flyway Community Edition 8.5.10 by Redgate
See what's new here: https://flywaydb.org/documentation/learnmore/releaseNotes#8.5.10
Database: jdbc:postgresql://db:5432/work (PostgreSQL 12.7)
Schema version: 4
+-----------+---------+-----------------------+----------+---------------------+----------+
| Category | Version | Description | Type | Installed On | State |
+-----------+---------+-----------------------+----------+---------------------+----------+
| | 1 | << Flyway Baseline >> | BASELINE | 2022-05-09 04:27:27 | Baseline |
+-----------+---------+-----------------------+----------+---------------------+----------+
4.SQLファイルを作成する。
それではSQLファイルを作成していきます。まず、SQLファイルの格納先は flyway.conf
の flyway.locations=filesystem:sql
で定義した場所になります。
また、SQLファイル名には決まりがあるため、以下の決まりに沿った名称をつけます。
Versioned Migrations | 基本的にこれを使用する。DDLやDMLが対象。 |
Undo Migrations | 同じバージョンでマイグレーションの結果を元に戻す際に使用する。有料プランのみ使用可能。 — 例:V1__create_table.sql → U1__drop_table.sql でinfoを実行するとバージョンは1のまま。 |
Repeatable Migrations | Viewやプロシージャ、ファンクションなど1つのファイルで管理するものが対象。 |
今回は、簡単なテーブルを作成する以下のSQLファイルを作成します。
V1__create_user_table.sql
// デフォルトスキーマをflyway.confに設定していないため、スキーマまで指定しています。
CREATE TABLE public.user (
id SERIAL PRIMARY KEY,
name VARCHAR(30) NOT NULL,
password VARCHAR(40) NOT NULL,
email VARCHAR(30) NOT NULL,
created_at TIMESTAMP NOT NULL
);
5.作成したSQLファイルをinfoコマンドで確認する。
infoコマンドを実行すると、作成したSQLファイルが表示されます。まだ、DBに適用されていないため、「Status」が「Pendding」になっています。
$ flyway info
Flyway is up to date
Flyway Community Edition 8.5.10 by Redgate
See what's new here: https://flywaydb.org/documentation/learnmore/releaseNotes#8.5.10
Database: jdbc:postgresql://db:5432/work (PostgreSQL 12.7)
Schema version: 1
+-----------+---------+-----------------------+----------+---------------------+----------+
| Category | Version | Description | Type | Installed On | State |
+-----------+---------+-----------------------+----------+---------------------+----------+
| | 1 | << Flyway Baseline >> | BASELINE | 2022-05-12 12:41:50 | Baseline |
| Versioned | 2 | create user table | SQL | | Pending |
+-----------+---------+-----------------------+----------+---------------------+----------+
flyway@d4fb4712499a:~$
6.マイグレートを実行する。
$ flyway migrate
Flyway is up to date
Flyway Community Edition 8.5.10 by Redgate
See what's new here: https://flywaydb.org/documentation/learnmore/releaseNotes#8.5.10
Database: jdbc:postgresql://db:5432/work (PostgreSQL 12.7)
Successfully validated 2 migrations (execution time 00:00.060s)
Current version of schema "public": 1
Migrating schema "public" to version "2 - create user table"
Successfully applied 1 migration to schema "public", now at version v2 (execution time 00:00.066s)
flyway@d4fb4712499a:~$
実際のDBを確認すると、以下のようにちゃんとテーブルが作成されていることが分かります。
work=# \d
List of relations
Schema | Name | Type | Owner
--------+-----------------------+----------+----------
public | flyway_schema_history | table | postgres <- Flywayのメタデータを保存しているテーブル。
public | user | table | postgres
public | user_id_seq | sequence | postgres
(3 rows)
work=#
以上でFlywayの紹介は終了です。
コメント