go - 使用 golang-migrate 时出现脏数据库版本错误
问题描述
我是golang-migrate的新用户。
我已经运行了一些成功执行的迁移。
我处于开发模式,所以我想在psql
shell 中重新运行迁移,在连接到我的数据库后,我执行了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 意味着您尝试运行迁移 v2 并且它失败了。
如果迁移失败,数据库可能会不一致或损坏。
在损坏状态之上重新运行其他迁移是不可预测的,因此在您清理数据库之前迁移会被阻止。
https://github.com/golang-migrate/migrate/blob/master/FAQ.md#what-does-dirty-database-mean
“脏”数据库是什么意思?
在迁移运行之前,每个数据库都会设置一个脏标志。如果迁移失败并且脏状态持续存在,则执行停止,这会阻止尝试在失败的迁移之上运行更多迁移。您需要手动修复错误,然后“强制”预期版本。
清理数据库后,您还可以打开schema_migrations
表并将脏标志和回滚版本号更改为成功应用的最后一次迁移。
推荐阅读
- github-api - 为什么速率限制与授权和匿名访问 GitHub API 相似?
- python - 如何使用循环创建字典以在 python 中保存数据帧
- python - Buildroot 失败找不到 python 模块:“ImportError:找不到 Cython!”
- python - 使用 Python 从 Excel 单元格中检索格式化文本的索引
- python - 使用没有数值的 Pandas groupby
- post - 带有奇怪引用者的 POST 请求
- netlogo - 在同一个补丁中消灭两只海龟
- angular - SignalR HubConnection中的skipNegotiation是什么意思?
- python - 如何让用户输入列表?
- apache-kafka - Confluent Kafka REST 代理 Docker confluentinc/cp-kafka-rest:6.2.1 - 由于 LOG4J 错误而无法启动