2 回答
TA贡献1829条经验 获得超7个赞
至于 pq v1.5.2 和 gorm v1.9.12
首先,您需要确定创建方法调用是否返回错误。这样
err := GetDB().Create(user).Error
if err != nil {
// code to handle error
}
然后pq包具有映射到postgres服务器错误的特殊类型。它包含可以帮助您识别错误严重性,代码,与错误相关的表等字段。
psql 字段标识符的完整列表可以在
错误和通知消息字段
https://www.postgresql.org/docs/current/protocol-error-fields.html
要解决您的问题作为一个选项,我们可以使用字段
Code
这是错误代码的字符串类型表示形式。但首先,我们需要强制转换错误并检查类型转换是否成功。这样
err := GetDB().Create(user).Error
if err != nil {
pqErr, ok := err.(pq.Error)
if !ok {
log.Fatal(err)
}
// code to handle specific error code
}
错误代码列表可以在官方postgresql文档中找到 https://www.postgresql.org/docs/9.3/errcodes-appendix.html
以及实际转到pq库中 github.com/lib/pq/error.go 的错误进行pq特定映射
最后,我们可以通过代码将错误处理为重复错误
err := GetDB().Create(user).Error
if err != nil {
pqErr, ok := err.(pq.Error)
if !ok {
log.Fatal(err)
}
// note that type casting here is redundant and used for showing specific
// string type from pq library
if pqErr.Code == pq.ErrorCode("23505") { // 23505 is unique_violation error code for psql
// now you can create error and write it to a message to return it for
// a client
}
}
TA贡献1810条经验 获得超4个赞
根据注释,gorm 提供对“创建记录”函数中数据库错误的访问,如下所示:
result := GetDB().Create(user)
if result.Error != nil {
// Do something with the error
}
请注意,检查错误字符串可能会使您的应用程序数据库成为特定数据库(但这可能不是您的问题)。这个问题的答案可能会提供进一步的帮助。
- 2 回答
- 0 关注
- 77 浏览
添加回答
举报