君は心理学者なのか?

大学時代に心理学を専攻しなぜかプログラマになった、サイコ(心理学)プログラマかろてんの雑記。

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というテーブルでも確認できます。