🎉

[memo] gooseでfailed to ensure DB version: no next versionが発生した時

2024/02/26に公開

前提

  • goose
    • go製のマイグレーションツール
    • 検証時のバージョン: 3.7.0
  • 利用RDBMS: MySQL8.0

事象

upやstatusなどのgooseコマンド実行時に以下のようなメッセージが表示される

$goose -dir ./db/migrations/ mysql "root:password@tcp(localhost:3306)/your-db?parseTime=true" status
goose run: failed to ensure DB version: no next version found

結論

gooseのバージョンテーブルが存在しない、またはテーブルはあるが初期レコードが存在しないことで発生すると思われる。
なのでテーブルを作成し初期レコードをINSERTすると解決する。

解決方法

  1. バージョンテーブルが存在するかどうか確認する
show tables like 'goose_db_version'
  1. テーブルが存在しない場合は作成する
create table goose_db_version
(
    id         bigint unsigned auto_increment
        primary key,
    version_id bigint                              not null,
    is_applied tinyint(1)                          not null,
    tstamp     timestamp default CURRENT_TIMESTAMP null,
    constraint id
        unique (id)
);
  1. 初期レコードをINSERTする
INSERT INTO goose_db_version (version_id, is_applied) VALUES (0, TRUE);

Reference

https://github.com/pressly/goose/issues/302#issuecomment-1033306388

Discussion