我想通过访问错误代码来处理postgresql唯一约束错误。我已经阅读了这些文章here和here,并且还浏览了文档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没有导出,但我对如何实现这一点感到难过。
答案 0 :(得分:0)
如果您使用的是Postgres,则可以执行以下操作:
if pgErr, ok := err.(*pq.Error); ok {
if pgErr.Code == "23505" {
//handle duplicate insert
}
}