なんかいろいろと書いてくブログ

関東のどこかで働く、一般人

【Go】sql-migrateに関するメモ

C#ではVidualStudioのデザイナーでTable定義を変えることが多く、
migrationをあまりしたことがなかった。

そのため。現在お仕事させて頂いているGoの案件では
全くわからん状態だったので、覚書として記事にする

sql-migrate

Goのマイグレーションライブラリ
Github は以下

github.com

追加には

go get -v github.com/rubenv/sql-migrate/...

migrateに必要なファイルについて

  • 設定ファイル (dbconfig.yml)
  • migrateファイル

設定ファイル (dbconfig.yml)

yml形式で設定を記載

development:
  dialect: mysql
  datasource: 
  dir: db/migrations
  table: migrations
  • dialect
    MySqlを使用するならmysql、PostgreSQLならpostgres
  • datasource
    名前の通り、datasourceを記載
  • dir
    migrateファイルを置いてあるディレクトリ
  • table
    migrateファイルの実行ログを置いておくTable名を記載

migrateファイル

一応、手動でも作れるようだが new コマンドで作成できる

sql-migrate new foo

作成されるファイルは202202192156-foo.sqlのような タイムスタンプ + 任意のファイル名となる

作成したファイルには下記のようなコメントが記載されている

-- +migrate Up
 
-- +migrate Down

migrate Upには、migrateで実行したいSQL を migrate Downには、そのSQLをうち消すためのSQLを記載する

migrateを行うにはupコマンドをおこなう

sql-migrate up

また、戻したいときは

sql-migrate down

でmigrate Downに記載されたSQLが実行されて 打ち消される(はず!)

そのほかのコマンド

  • redo 最後に実行したものを再実行できるよう
    私は使用したことはない

  • status 実行したmigrateファイルが確認できる
    ちなみに、dbconfid.ymlでtableを定義していれば
    そのtable内に実行したmigrateファイル名が記録されている

注意点として一度実行したmigrateファイルはtableに記録され、
次回、migarate up をしても実行対象にならない

もし、migrateファイルを修正して再実行したいときは
dbconfid.ymlで定義したtableから
対象のファイル名が記載されたデータを削除する必要がある