動作を見るためにここでは PostgreSQL を使います。接続できる適当なものが無い人は Docker で以下のように建てましょう。
docker run \
--rm \
-p 33445:5432 \
-e POSTGRES_HOST_AUTH_METHOD=trust \
postgresこれにはpostgres://postgres:@0.0.0.0:33445という
URI で接続できます。
準備
最初にdiesel setupという準備コマンドを叩く必要があります。その際上記の URI を指定します。
注意点としてこのコマンドはCargo.tomlを持つディレクトリで実行する必要があります。
# cargo init sandbox && cd sandbox
diesel setup --database-url postgres://postgres:@0.0.0.0:33445実行後migrations/ディレクトリがこのような構造でできます。
migrations
└── 00000000000000_diesel_initial_setup
├── down.sql
└── up.sqlmigration
準備ができたので migration ファイルを作っていけます。例えば以下のようなコマンドを叩きます。
diesel migration generate create_notes_table先程のmigration/の中身にこれ用のup.sqlとdown.sqlが作られたハズです。
migrations/
├── 00000000000000_diesel_initial_setup
│ ├── down.sql
│ └── up.sql
└── 2020-01-17-090405_create_notes_table
├── down.sql
└── up.sqlup.sqlとdown.sqlの内容をそれぞれ以下のようにしてみます。
-- `up.sql`
CREATE TABLE notes (
id SERIAL PRIMARY KEY,
title VARCHAR(128) UNIQUE NOT NULL
)
-- `down.sql`
DROP TABLE notesこれらを適用するにはmigration runコマンドを実行します。URI も忘れずに。
diesel migration run --database-url postgres://postgres:@0.0.0.0:33445
# Running migration 2020-01-17-090405_create_notes_table無事終わったら今度は戻すときのコマンドも問題ないかmigration redoで確認します。
diesel migration redo --database-url postgres://postgres:@0.0.0.0:33445
# Rolling back migration 2020-01-17-090405_create_notes_table
# Running migration 2020-01-17-090405_create_notes_tableどうやら大丈夫そうです。戻すだけのmigration revertコマンドもあり、連続で叩いて好きな所まで戻れます。
--database-url を省略
dotenvモジュールをサポートしているので、.envへDATABASE_URLを書き込むとそっちを優先して使ってくれます。
echo 'DATABASE_URL=postgres://postgres:@0.0.0.0:33445' > .env
diesel migration redo
# Rolling back migration 2020-01-17-090405_create_notes_table
# Running migration 2020-01-17-090405_create_notes_table