Ошибка версии грязной базы данных при использовании golang -migrate - PullRequest
1 голос
/ 06 января 2020

Я новый пользователь 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. Исправленная и принудительная версия.

О чем эта ошибка и как я могу ее исправить адрес это?

1 Ответ

3 голосов
/ 06 января 2020

Грязная база данных версии 2 означает, что вы попытались запустить миграцию v2, и она не удалась.

База данных может быть несовместимой или поврежденной в случае сбоя миграции.

Повторный запуск дополнительных миграций поверх нарушенного состояния непредсказуем, и поэтому миграции блокируются до тех пор, пока вы не очистите базу данных.

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

Что означает «грязная» база данных?

Перед выполнением миграции каждая база данных устанавливает грязный флаг. Выполнение останавливается, если миграция завершается неудачно, и сохраняется грязное состояние, что предотвращает попытки выполнить больше миграций поверх неудачной миграции. Вам необходимо вручную исправить ошибку, а затем «принудительно» вызвать ожидаемую версию.

После очистки базы данных вы также можете открыть таблицу schema_migrations и изменить флаг Dirty и номер версии отката до последней успешно выполненной миграции.

...