从Go中的postgres获取错误代码

时间:2015-07-22 14:06:21

标签: postgresql go error-handling

当我在postgres中收到错误时,我无法检索错误代码。

在我的程序测试中,我知道我会收到以下错误 “pq:重复键值违反了唯一约束”associations_pkey“”。

查看postgres文档,这很可能是pq错误代码23505。

我需要在我的Go程序中获取该数字,以便我可以检查不同类型的错误并以有用的方式响应最终用户。

但是,我似乎无法抓住Go中的错误代码,只显示错误消息。我的代码如下:

stmt, _ := DB.Prepare("INSERT INTO table (column_1) VALUES ($1)")

_, err = stmt.Exec("12324354")

if err != nil {
    log.Println("Failed to stmt .Exec while trying to insert new association")
    log.Println(err.Error())
    fmt.Println(err.Code())

} else {
    Render.JSON(w, 200, "New row was created succesfully")
}

2 个答案:

答案 0 :(得分:6)

您需要键入将错误声明为类型*pq.Error

pqErr := err.(*pq.Error)
log.Println(pqErr.Code)

答案 1 :(得分:3)

这是written in the documentation。如您所见,您可以通过以下方式提取它:

if err, ok := err.(*pq.Error); ok {
    fmt.Println(err.Code)
}

不要忘记从导入_ "github.com/lib/pq"中删除下划线。如您所见err有一个lot of information about the error(不仅Code还有许多其他人)。

请注意,您无法将其直接与某些代码进行比较(它是ErrorCode type)。

所以你必须将它转换为字符串并与字符串进行比较。

https://godoc.org/github.com/lib/pq#Error