C#ではVidualStudioのデザイナーでTable定義を変えることが多く、
migrationをあまりしたことがなかった。
そのため。現在お仕事させて頂いているGoの案件では
全くわからん状態だったので、覚書として記事にする
sql-migrate
Goのマイグレーションライブラリ
Github は以下
追加には
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から
対象のファイル名が記載されたデータを削除する必要がある