LoginSignup
71
38

More than 5 years have passed since last update.

Go製マイグレーションツールsql-migrate

Last updated at Posted at 2018-10-05

概要

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_migrationsdirは作成されたmigrationファイルの保存先。
オプションでこの辺りの名前は色々変更ができるし、デフォルトのままでも問題ない。

dbconfig.yml
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でそれぞれ指定する。

20181005103536-create_users.sql
-- +migrate Up
CREATE TABLE IF NOT EXISTS users (id int);

-- +migrate Down
DROP TABLE IF EXISTS users;

migrationの実行管理テーブル

マイグレーション初回実行時にgorp_migrationsというテーブルが自動で作成される。
このテーブルには実行したマイグレーションファイル名をインサートして実行済みか否かを管理してる。

終わり

本番環境でも使っていて特に問題はなし。
他にも色々な機能があるので詳しくは公式リポジトリのREADMEを読んでください

71
38
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
71
38