こちらに引き続き、環境の構築をしているのでメモ的に残そうと思います。
Databaseはmysqlを使っていて、テーブルを作成するのにgooseを使っています。
こちらは、プロジェクトにimportしていないので、go get
で別途取得します。
install
go get bitbucket.org/liamstask/goose/cmd/goose
.bash_profile
export PATH="$GOPATH/bin:$PATH"
これでgoose
コマンドが使えるようになります。
$ goose goose is a database migration management system for Go projects. Usage: goose [options] <subcommand> [subcommand options] Options: -env string which DB environment to use (default "development") -path string folder containing db info (default "db") -pgschema string which postgres-schema to migrate (default = none) Commands: up Migrate the DB to the most recent version available down Roll back the version by 1 redo Re-run the latest migration status dump the migration status for the current DB create Create the scaffolding for a new migration dbversion Print the current version of the database
Configuration
プロジェクトフォルダの下にdb
というフォルダを作成します。
db
の下にdbconf.yml
ファイルを作ります。
ファイルの中はこんな感じ。
# test: # driver: mysql # open: tcp:localhost:3306*[db_name]/[user_name]/[password] development: driver: mymysql open: tcp:localhost:3306*[db_name]/[user_name]/[password] # production: # driver: postgres # open: user=liam dbname=tester sslmode=verify-full customimport: driver: customdriver open: customdriver open import: github.com/custom/driver dialect: mysql environment_variable_config: driver: $DB_DRIVER open: $DATABASE_URL
今はdevelopmentしか使ってないです。
migrationファイル
goose create [マイグレーション名] sql
でファイルを作成できます。
-- +goose Up -- SQL in section 'Up' is executed when this migration is applied -- +goose Down -- SQL section 'Down' is executed when this migration is rolled back
中はただこれだけなので、ここにSQLを書いていきます。
例えばこんな感じ。
-- +goose Up -- SQL in section 'Up' is executed when this migration is applied CREATE TABLE IF NOT EXISTS sample ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(255), update_at DATETIME, create_at DATETIME, PRIMARY KEY (id) ) ENGINE = InnoDB; -- +goose Down -- SQL section 'Down' is executed when this migration is rolled back DROP TABLE sample;
UP
$ goose up goose: migrating db environment 'development', current version: 20170923140458, target: 20180129163234 OK 20180129163234_sample.sql
できた。
DOWN
$ goose down goose: migrating db environment 'development', current version: 20180129163234, target: 20170923140458 OK 20180129163234_sample.sql
簡単です。