4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[golang]rake db:migrateみたいな事をgoでできるgooseを使ってみた

Last updated at Posted at 2020-03-15

Go言語でマイグレーションどうやんの…というところで色々試したうちの1つ。
Railsのrake db:migrationみたいな事ができるので、Railsに慣れている人には比較的使いやすいのではないかと思う。

環境

go 1.13.4

gooseが記事執筆時点で対応しているデータベース

  • postgres
  • mysql
  • sqlite3
  • mssql
  • redshift

gooseのインストール

go get -u github.com/pressly/goose/cmd/goose

各種コマンド

databaseを作る

db:create相当のコマンドは無い

マイグレーションファイルを作る

$ goose mysql "user:password@/testdb?parseTime=true" create AddColumnToTestTable sql
2020/03/15 11:10:29 Created new file: 20200315111029_AddColumnToTestTable.sql

すると以下のようなファイルが出力されるので、中身のSQL文は自分で書く。
Railsほどいい感じにテンプレート出力されるわけではない。

-- +goose Up
-- SQL in this section is executed when the migration is applied.

-- +goose Down
-- SQL in this section is executed when the migration is rolled back.

マイグレーションを実行する

-- +goose Up セクションに記載された内容が実行される。

# 1つだけ実行
goose mysql "user:password@/testdb?parseTime=true" up-by-one

# まだ実行してないものを全部実行
goose mysql "user:password@/testdb?parseTime=true" up

# 特定のバージョンまで実行
# そのバージョンも含む
goose mysql "user:password@/testdb?parseTime=true" up-to 20200315111029

巻き戻し

-- +goose Down セクションに記載された内容が実行される。

# 最初まで巻き戻し
goose mysql "user:password@/testdb?parseTime=true" down

# 特定のバージョンまで巻き戻し
# 指定したバージョンは含まない
goose mysql "user:password@/testdb?parseTime=true" down-to 20200315111029

再実行

特定のマイグレーションをdownしてからupする。

goose mysql "user:password@/testdb?parseTime=true" redo 20200315111029

欠点

コマンドラインにパスワードを含むのでDBのパスワードがコマンド履歴に残る。
BitBucketのほうのGooseは設定ファイルに書けるらしい。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?