访问lib / pq中的唯一约束错误

时间:2018-01-12 18:46:39

标签: postgresql go

我想通过访问错误代码来处理postgresql唯一约束错误。我已经阅读了这些文章herehere,并且还浏览了文档here,但仍然不太了解如何实现它并访问db返回的错误代码。似乎只实现了Message字段方法:

func (err Error) Error() string {
    return "pq: " + err.Message
}

如果我想访问SQLSTATE代码,请执行以下操作:

func (err *Error) Error() string {
  return err.Code
}

并假设定义here的错误结构将可用。

我在我的处理程序中试过这样的东西:

sqlInsert := INSERT INTO usrtable (usrCode, teamName, email, phone) VALUES ($1,$2,$3,$4)

_, err := db.Exec(sqlInsert, Data.UsrCode, Data.Teamname, Data.Email, Data.Phone)
if err != nil {
        switch err {
        case errorCodeNames["23505"]:
            // Return web page identifying field and advising user what to do.
            return

这返回undefined,这是有道理的,因为errorCodeNames没有导出,但我对如何实现这一点感到难过。

1 个答案:

答案 0 :(得分:0)

如果您使用的是Postgres,则可以执行以下操作:

if pgErr, ok := err.(*pq.Error); ok {
    if pgErr.Code == "23505" {
        //handle duplicate insert
    }
}