登录
首页 >  Golang >  Go问答

db.Exec(...) 返回的错误是否有代码?

来源:Golang技术栈

时间:2023-04-12 21:35:23 278浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《db.Exec(...) 返回的错误是否有代码?》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下golang,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

我正在尝试通过执行以下操作使用 postgres 驱动程序(lib/pq)删除数据库:

db.Exec("DROP DATABASE dbName;")

但是我想根据收到的错误是奇怪的东西还是“数据库不存在”错误来做一个不同的条件。

是否有一个常量变量或我可以用来检查返回的错误是否是“数据库不存在”错误消息的东西,还是我必须自己手动解析错误字符串?

我试图查看文档,但找不到“数据库不存在”的任何内容。然而,我确实找到[了这个列表](https://www.postgresql.org/docs/9.3/static/errcodes- appendix.html)。

也许它适合其他一些错误代码?此外,我不太确定通过 Postgres 驱动程序获取和比较错误代码的语义正确方法。我想我应该做这样的事情:

if err.ErrorCode != "xxx"

正确答案

lib/pq包可能会返回类型*pq.Error为 struct 的错误。如果是这样,您可以使用其所有字段来检查错误的详细信息。

这是可以做到的:

if err, ok := err.(*pq.Error); ok {
    // Here err is of type *pq.Error, you may inspect all its fields, e.g.:
    fmt.Println("pq error:", err.Code.Name())
}

pq.Error具有以下字段:

type Error struct {
    Severity         string
    Code             ErrorCode
    Message          string
    Detail           string
    Hint             string
    Position         string
    InternalPosition string
    InternalQuery    string
    Where            string
    Schema           string
    Table            string
    Column           string
    DataTypeName     string
    Constraint       string
    File             string
    Line             string
    Routine          string
}

这些字段的含义和可能的值是 Postres 特定的,完整列表可以在这里找到:[错误和通知消息字段](https://www.postgresql.org/docs/current/static/protocol- error-fields.html)

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

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