概要
Go製のデータベースmigrationツールとしてsql-migrate
を使って開発しているのでコマンドや動作仕様などを簡単に書く。
公式リポジトリ
特徴
- CLIツール
- SQLite, PostgreSQL, MySQL, Oracleなどの色々なデータベースをサポート
- スキーマの作成/変更/ロールバック機能
- ソースコードからの実行制御
- その他色々
インストール
$ go get github.com/rubenv/sql-migrate/...
詳細
公式のREADMEを見れば分かる事だけど日本語で書いていく
設定ファイル
デフォルトはdbconfig.yml
というファイル名で参照される。yml内のenv
キーではdevelopment
, production
など環境ごとに設定を定義できる。migrationの実行を管理するテーブル名はgorp_migrations
。dir
は作成されたmigrationファイルの保存先。
オプションでこの辺りの名前は色々変更ができるし、デフォルトのままでも問題ない。
development:
dialect: mysql
dir: db/migrations
datasource: user_name:password@tcp(127.0.0.1)/dbname?charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=true
production:
dialect: postgres
dir: migrations/postgres
datasource: dbname=myapp sslmode=disable
table: migrations
コマンド色々
# ヘルプ
$ sql-migrate --help
マイグレーション作成
# 以下のコマンドでは「20181005103536-create_users.sql」みたいなマイグレーションファイルが作成される
# ファイル名のdatetimeは自動で付与
$ sql-migrate new create_users
# マイグレーションの実行
$ sql-migrate up
# マイグレーションをdryrunで実行。実行予定のsqlが出力される
$ sql-migrate up -dryrun
# マイグレーションのロールバック
$ sql-migrate down
# マイグレーションの実行状態確認
$ sql-migrate status
マイグレーションファイルの内容
マイグレーション作成すると.sql
としてファイルが生成される。sqlコメント文を使用しup
の処理なのかdown
の処理なのかを-- +migration Up
、-- +migration Down
でそれぞれ指定する。
-- +migrate Up
CREATE TABLE IF NOT EXISTS users (id int);
-- +migrate Down
DROP TABLE IF EXISTS users;
migrationの実行管理テーブル
マイグレーション初回実行時にgorp_migrations
というテーブルが自動で作成される。
このテーブルには実行したマイグレーションファイル名をインサートして実行済みか否かを管理してる。
終わり
本番環境でも使っていて特に問題はなし。
他にも色々な機能があるので詳しくは公式リポジトリのREADMEを読んでください