事象

golang-migrateを使ってマイグレーションを実行するためにmigrate.goを作っているときに発生。

package main

import (
	"log"

	"github.com/golang-migrate/migrate/v4"
	_ "github.com/golang-migrate/migrate/v4/database/postgres"
	_ "github.com/golang-migrate/migrate/v4/source/file"
)

func main() {
	m, err := migrate.New(
		"file://db/migrations",
		"postgres://postgres:example@db:5432/example?sslmode=disable")

	if err != nil {
		log.Fatal(err)
	}
	// modify for Down
	if err := m.Up(); err != nil {
		log.Fatal(err)
	}
}

原因と対応

マイグレーションに失敗したけど、スキーマのバージョンだけが上がっているのが原因。
マイグレーションのバージョンを管理している schema_migrations のデータを削除すれば直る。

参考

migrate/TUTORIAL.md at master · golang-migrate/migrate (github.com)