如何查询Golang pq驱动返回的Postgres uuid无效输入错误的类型定义
Postgres UUID无效输入语法错误匹配方案
你遇到的pq: invalid input syntax for type uuid:...错误没有单独的预定义专属类型,原因是这类错误属于Postgres服务端返回的通用输入语法错误范畴,匹配逻辑如下:
- Postgres返回的所有服务端错误都会携带标准SQLSTATE错误码,UUID无效输入语法对应的错误码为
22P02,含义为「无效的类型文本表示」。 - 如果你使用的是Go生态的
lib/pq驱动,可以通过类型断言将错误转为*pq.Error结构体,读取Code字段匹配错误码,同时补充错误内容的uuid关键词判断避免误判,示例代码如下:
import ( "github.com/lib/pq" "strings" ) func handleDBError(err error) (isUUIDInvalid bool) { pqErr, ok := err.(*pq.Error) if !ok { return false } return pqErr.Code == "22P02" && strings.Contains(pqErr.Error(), "type uuid") } // 业务逻辑中调用 if err := db.QueryRow(...).Scan(...); err != nil { if handleDBError(err) { // 返回404响应 return } // 其他错误走原有5xx逻辑 }
- 如果你使用其他语言的Postgres驱动,逻辑完全一致:所有兼容PG协议的驱动都会透传SQLSTATE错误码,你只需要在对应驱动的错误结构体中找到错误码字段,结合uuid关键词判断即可实现精准匹配。
错误定义的来源
这个错误的规则定义在Postgres服务端的标准错误码体系中,不属于驱动层的预定义类型,所以你在Postgres客户端库中找不到对应的专属错误类型定义。
内容的提问来源于stack exchange,提问作者Aibol Orazbekov
相关产品推荐
相关产品推荐

