golang-migrate の使い方
これは何?
- golang-migrate の使い方メモ
- Database として PostgreSQL を使用することを想定
ドキュメント
golang-migrate とは
- データベースのマイグレーションツール
- DB から DB への移行・・・ではなくスキーマを定義して DB に適用するマイグレーション
 
- CLI としてもライブラリとして使うことも出来る
golang-migrate/migrate: Database migrations. CLI and Golang library.
https://github.com/golang-migrate/migrate
使い方
マイグレーションファイルを作成する
migrate create でマイグレーションファイルを作成する
migrate create -ext sql -dir ./db/migrations -seq create_users- -ext: extention (拡張子) の指定- 上記の例では sql を使用しているので xxxxxx.up.sql, xxxxxx.down.sql というファイルが作成される
 
- -dir: マイグレーションファイルを作成するディレクトリの path
- -seq: マイグレーションファイルにシーケンシャル番号を付与する- 000001_create_users.up.sql のような形で、ファイル名先頭にシーケンシャル番号が付与される
- -seqを指定しない場合はタイムスタンプが代わりに付与される
 
up ファイルには作成するテーブルやデータを定義する
CREATE TABLE IF NOT EXISTS users(
   user_id serial PRIMARY KEY,
   username VARCHAR (50) UNIQUE NOT NULL,
   password VARCHAR (50) NOT NULL,
   email VARCHAR (300) UNIQUE NOT NULL
);down ファイルにはクリーンアップするクエリを定義する
DROP TABLE IF EXISTS users;マイグレーションを実行する
POSTGRESQL_URL='postgres://postgres:password@localhost:5432/example?sslmode=disable'
migrate -database ${POSTGRESQL_URL} -path ./db/migrations upPostgreSQL の場合は以下のようなコマンドでテーブル定義を確認できる
% psql mydatabase -c "\d users"
                                       Table "public.users"
  Column  |          Type          | Collation | Nullable |                Default                 
----------+------------------------+-----------+----------+----------------------------------------
 user_id  | integer                |           | not null | nextval('users_user_id_seq'::regclass)
 username | character varying(50)  |           | not null | 
 password | character varying(50)  |           | not null | 
 email    | character varying(300) |           | not null | 
Indexes:
    "users_pkey" PRIMARY KEY, btree (user_id)
    "users_email_key" UNIQUE CONSTRAINT, btree (email)
    "users_username_key" UNIQUE CONSTRAINT, btree (username)クリーンアップする場合は down すれば良い
migrate -database ${POSTGRESQL_URL} -path ./db/migrations down試した環境
% sw_vers
ProductName:	macOS
ProductVersion:	12.4
BuildVersion:	21F79
% migrate -version
v4.15.2