登录
首页 >  Golang >  Go问答

Go 语言中数据库升级的最佳实践

来源:stackoverflow

时间:2024-03-02 08:18:26 365浏览 收藏

本篇文章给大家分享《Go 语言中数据库升级的最佳实践》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

我们有一个 go 应用程序,我们使用 postgres 作为后端数据库。 我们使用 https://github.com/jmoiron/sqlx 与数据库进行通信。 从表中读取所有行的代码如下:

rows, err := repo.db.queryx(listnodesquery)
 if err != nil {
    repo.logger.log("method", "listnodes", "error", err)
    return nil, err
 }

 r := []*node{}
 for rows.next() {
    var n node
    err = rows.structscan(&n)
 }

在数据库中添加新列后,代码按预期出现错误,如下

missing destination name type in *Node

因为数据库表有更多列。更改代码以同时更新结构当然是不可能的。

我发现关闭此错误的一种方法是使用此处记录的 db.unsafe

还有其他惯用的方法来处理这种情况吗?


解决方案


您可以在代码库中管理数据库架构,并拥有一些应用程序启动代码,自动将数据库迁移到最新的架构版本,以保持代码和数据库同步。

其中一个选项是 github.com/golang-migrate

在应用程序启动时运行此代码以将数据库架构更新到最新版本:

migrate, err := migrate.New("folder to sql scrips", "db connection string")
if err != nil {
    logger.Panic(err)
}
err = migrate.Up()
if err != nil {
    logger.Panic(err)
}

理论要掌握,实操不能落!以上关于《Go 语言中数据库升级的最佳实践》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>