enkdsnnnnnnnn

めもるめもる

gooseの事始めで躓いた

Gooseって?

github.com

Goose is a database migration tool. Manage your database schema by creating incremental SQL changes or Go functions.

 

事象と対応流れ
  • MysqlでDB作成
  • user作って権限付与
  • gooseからgoose up実行
  • 何かがおかしい。goose upできない
  • 権限修正
  • テーブル消す
  • 再度goose up
  • 修正完了
吐かれたエラー

といっても、mysql側でユーザを作ったときに、適切な権限付与を怠ったせい。

goose run: Error 1142: 
INSERT command denied to user 'user'@'localhost' for table 'goose_db_version'

-> ただただuserへの権限付与がちゃんとできていなかっただけ

goose run: Error 1050: 
Table 'goose_db_version' already exists

-> 問題はこいつ

原因

mysqlで作ったユーザがCREATE TABLEの権限だけ持っていて、その状態でgoose upしたもんだから

  • goose_db_versionのテーブルはある。
  • INSERTされていないので行が入らない

という、goose側から見て整合性が保てていない状態になってしまっていた。

対応

めんどくさいので、全部の権限を作成したユーザに付与

GRANT ALL ON gwatest.* TO 'user'@'localhost';

つぎに、goose_db_versionテーブルを削除

DROP TABLE goose_db_version

そのあと、goose upを再度起動

goose  mysql "user:password@/gwatest?parseTime=true" up