首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用golang-migrate时出现的脏数据库版本错误

使用golang-migrate时出现的脏数据库版本错误
EN

Stack Overflow用户
提问于 2020-01-06 17:12:39
回答 3查看 22.9K关注 0票数 16

我是戈朗-迁移的新用户。

我已经运行了一些成功执行的迁移。

我处于开发模式,所以我想在重新运行迁移之前,在psql shell中,在连接到我的数据库之后,我执行了drop database schema_migrations

现在的问题是,当我运行执行迁移的代码时(如下所示)

代码语言:javascript
复制
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.修复和强制版本。

这个错误是关于什么的,我如何解决这个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-01-06 17:37:19

脏数据库版本2意味着您试图运行迁移v2,但它失败了。

如果迁移失败,数据库可能不一致或损坏。

在损坏状态之上重新运行其他迁移是不可预测的,因此迁移将被阻塞,直到清理数据库。

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

“脏”数据库是什么意思? 在运行迁移之前,每个数据库都会设置一个脏标志。如果迁移失败且脏状态持续存在,则执行将停止,这将阻止在失败迁移的基础上运行更多迁移的尝试。您需要手动修复错误,然后“强制”预期的版本。

在清理数据库之后,还可以打开schema_migrations表,并将脏标志和回滚版本号更改为最后一次成功应用的迁移。

票数 22
EN

Stack Overflow用户

发布于 2022-08-19 10:31:53

我通过将脏标志更新为零来解决此错误。在我的例子中,我的数据库名是"auth“。因此,我首先运行下面的命令来检查脏版本。

代码语言:javascript
复制
select * from auth_migrations

在输出中,我发现列脏有一个值1。

然后我把它更新为零,我的问题就解决了。

注意:如果您的数据库名为"exampleDb“,那么您的脏版本将在"exampleDb_migrations”中。

票数 0
EN

Stack Overflow用户

发布于 2022-09-19 15:36:03

如果删除schema_migrations表,则可以通过强制迁移版本重新创建它。

例如

代码语言:javascript
复制
m, err := migrate.New("file://db/migrations","postgres://postgres:postgres@localhost:5432/mydatabase?sslmode=disable")
if err != nil {
    log.Fatal(err)
}
err := m.Force(11) //11 is migrations version number, you may use your latest version
if err != nil {
    return err
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59616263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档