Go言語製のmigrationツール、sql-migateを使ってみた(postgresSQL編)
経緯
開発環境と本番環境のDB差異をできる限り無くすためにmigrationツールを導入する。
プロジェクトリポジトリと同じリポジトリでマイグレーションファイルを管理することにより、
ソースコードとDBスキーマのバージョンを同期させることができる。
使用するmigrationツールは「sql-migrate(https://github.com/rubenv/sql-migrate)」
導入
goの実行環境を入れる
$ brew install go
~/.bash_profileに以下を記述して、パスを通す
export GOPATH=$HOME/go export PATH=$PATH:$GOPATH/bin
~/.bash_profileを読み込む
source ~/.bash_profile
sql-migrateをinstall
$ go get -v github.com/rubenv/sql-migrate/...
$ sql-migrate -v #バージョンが表示されればinstall成功
DB設定をdbconfig.ymlで記述
development: dialect: postgres # 使用するRDBMS datasource: dbname=dbName host=hostName user=userName password=passWord port=5432 sslmode=disable dir: migrations/postgres # マイグレーションファイルのあるディレクトリ table: migrations # マイグレーション履歴を保存するテーブル名
使用方法
マイグレーションファイルの雛形を作成
sql-migrate new add-column-to-user-table # Created migration migrations/postgres/20181206145950-add-column-to-user-table.sql と表示されます。これが雛形です。
マイグレーションファイルの雛形を編集
-- +migrate Up create table users ( id serial PRIMARY KEY, name text NOT NULL, date timestamp NOT NULL); -- +migrate Down drop table users;
以上のようにup(行いたいスキーマ変更SQL)とdown(それを打ち消すSQL)の両方を記述する必要があります。
マイグレーションファイルの実行
sql-migrate up
これでupに記述したSQLが実行されます。 upに書いたSQLが間違っていたなどで、DBスキーマを元に戻したい場合は、
sql-migrate down
で元に戻してください。その後、upに書いたSQLを編集し、マイグレーションファイルを実行し直してください。
補足
どこまでマイグレーションが実行されているのかは、
$ sql-migrate status
で確認できます。 なおこの情報はmigrationsというテーブルでも確認できます。