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

使用golang migrate时出现脏数据库版本错误,go,migration,golang-migrate,Go,Migration,Golang Migrate,我是新用户 我已经运行了一些成功执行的迁移 我处于开发模式,因此我想在重新运行迁移之前,在psqlshell中,在连接到我的数据库之后,我执行了drop database schema\u迁移 现在的问题是,当我运行执行迁移的代码时(如下所示) func RunMigrations(){ m、 错误:=migrate.New( "file://db/migrations", "postgres://postgres:postgres@localhost:5432/mydatabase?sslm

我是新用户

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

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

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


func RunMigrations(){
m、 错误:=migrate.New(
"file://db/migrations",
"postgres://postgres:postgres@localhost:5432/mydatabase?sslmode=disable“)
如果错误!=零{
log.Fatal(错误)
}
如果错误:=m.Up();错误!=nil{
如果err.Error()=“无更改”{
log.Println(“迁移脚本未做任何更改”)
}否则{
log.Fatal(错误)
}
}
}
我得到这个错误

脏数据库版本2。修正和强制版本


此错误是关于什么的?如何解决此问题?

脏数据库版本2表示您尝试运行迁移v2,但失败

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

在断开状态的基础上重新运行其他迁移是不可预测的,因此在清理数据库之前,迁移将被阻止

“脏”数据库是什么意思

在迁移运行之前,每个 数据库设置脏标志。如果迁移失败并且 脏的状态持续存在,这会阻止尝试运行更多 迁移失败之后的迁移。您需要手动修复此问题 错误,然后“强制”预期版本


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

但是为什么删除
schema_迁移
表不能解决问题?迁移应该是安全的。没有
schema_migrations
表的数据库被解释为迁移未涵盖的数据库。如果迁移表不存在,go migrate将知道它应用的最后一次成功更改。在这种情况下,go migrate将从头开始,并尝试升级到最新版本。无关:如果多个服务使用同一个数据库,最好指定go migrate应使用的迁移表。依赖同一个表,您将无法升级来自不同位置的单独服务的表。请注意,如果您想跳过出现问题的迁移,只需将
schema\u migrations
entry dirty标志设置为false并重新部署您的服务。