コンソールで実行できるシンプルなマイグレーションアプリケーションです。
- 本アプリケーションはPostgreSQLの使用が前提となっています。
- DBの設定は.envを使用します。
- バイナリファイルの形では配布していませんので、各自の環境でビルドを行ってください。
Rustのインストールされた環境で以下を実行する。
cargo build --release
ビルドされた実行ファイルをディレクトリに配置してください。
ビルドされたファイルは以下のパスに生成されます。
./target/release/migrate
DBアクセス情報の設定が必要になります。
以下の手順で行ってください。
- .envファイルをビルドしたmigrationと同じディレクトリに配置する。
- .envファイルに以下の形式で、DBアクセス設定を記入しください。
DATABASE_URL=postgres://username:password@hostname:port/db_name
最初に、マイグレーションを管理するためのテーブルを作成します。
実行前に、PostgreSQLを使える環境、かつ、.env
で接続の設定をしていることを確認してください。
./migrate -i
# もしくは
./migrate --init
コマンド実行後、DBにmigrations
という名前の、マイグレーション管理用のテーブルが作成されます。
実行するマイグレーションを定義するためのファイルを作成します。
./migrate -c
# もしくは
./migrate --create
コマンド実行後、以下のようなファイルが作成されます。
# up file
./Migrations/<YYYY-MM-DD>_<UNIX_TIME_STAMP>_up.sql
# ./Migrations/2000-01-01_1234567890_up.sql
# down file
./Migrations/<YYYY-MM-DD>_<UNIX_TIME_STAMP>_down.sql
# ./Migrations/2000-01-01_1234567890_down.sql
作成されたup file
とdown file
に、実行したいマイグレーションを記載します。
実行したいマイグレーションを記載します。
SQLとして実行できる文であれば、記載可能です。
複数のクエリの記述も可能です。
記載時の注意点として、それぞれのSQL文の末尾には、必ず;
をつけてください。
一例として、以下のようなテーブル作成のSQL文などを書くとよいでしょう。
CREATE TABLE users (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
up fileに記載したSQL実行結果を、ロールバックするためのSQL文を記載します。
一例として、
up file
にテーブル作成のSQL文を定義。 ->down file
にup file
で作成したテーブルを削除するSQL文を定義。up file
にデータをインサートするSQL文を定義。 ->down file
にup file
でインサートしたデータを削除するSQL文を定義。
以下の例では、up file
で定義したテーブルを削除するSQL文を定義しています。
DROP TABLE users;
環境設定、事前準備が完了した後、以下のコマンドでマイグレーションが実行されます。
./migrate
過去に実行したマイグレーションはmigrations
テーブルで管理されています。
新規にマイグレーションファイルを追加定義した場合は、新規追加したマイグレーションのみが実行されます。
一例として手順を示します。
# マイグレーションを実行
./migrate
# 新しいマイグレーションファイルを作成
./migrate --create
# マイグレーションファイルにSQL文を追加定義
# 記載は割愛
# 新規マイグレーションを実行
# 新規追加したマイグレーションのみが実行される
./migrate
行ったマイグレーションを、特定の段階まで戻すことが可能です。
コマンドは以下のようになります。
# <n>は、いくつ前の段階に戻すかの回数を指定する
./migrate -r <n>
# もしくは
./migrate --rollback <n>
# 一例
# 2段階前の状態に戻す場合
./migrate -r 2
# もしくは
./migrate --rollback 2
また、可能な回数のロールバックのみを実行します。
2回マイグレーションを行っているDBの場合、2以上の数値を指定した場合は、2回のみロールバックが行われます(10や1000を指定しても2回のみ実行される)。
コマンドについて困った時はヘルプを参照してください。
以下のコマンドでヘルプが参照可能です。
./migrate -h
# もしくは
./migrate --help