web-dev-qa-db-ja.com

golang-migrate使用時のダーティデータベースバージョンエラー

私は golang-migrate の新しいユーザーです。

私は成功して実行されたいくつかの移行を実行しました。

私は開発モードにいるので、psqlシェルで移行を再実行したいので、データベースに接続した後、drop database schema_migrationsを実行します

今問題は、マイグレーションを実行するコードを実行すると(以下に示す)


func RunMigrations() {
    m, err := migrate.New(
        "file://db/migrations",
        "postgres://postgres:postgres@localhost:5432/mydatabase?sslmode=disable")
    if err != nil {
        log.Fatal(err)
    }
    if err := m.Up(); err != nil {
        if err.Error() == "no change" {
            log.Println("no change made by migration scripts")
        } else {
            log.Fatal(err)
        }
    }
}

このエラーが出ます

ダーティデータベースバージョン2。バージョンを修正して強制します。

このエラーは何ですか?これにどのように対処できますか?

2
pkaramol

ダーティデータベースバージョン2は、移行v2を実行しようとして失敗したことを意味します。

移行が失敗した場合、データベースが不整合になるか壊れる可能性があります。

壊れた状態の上で追加の移行を再実行することは予測不可能であるため、データベースをクリーンアップするまで移行はブロックされます。

https://github.com/golang-migrate/migrate/blob/master/FAQ.md#what-does-dirty-database-mean

「ダーティ」データベースとはどういう意味ですか?

移行が実行される前に、各データベースはダーティフラグを設定します。移行が失敗してダーティ状態が続くと実行が停止します。これにより、失敗した移行の上にさらに移行を実行する試みが防止されます。エラーを手動で修正してから、予想されるバージョンを「強制」する必要があります。

データベースをクリーンアップした後schema_migrationsテーブルを作成し、ダーティフラグとロールバックバージョン番号を、正常に適用された最後の移行に変更します。

4