使用Bun ORM查询PostgreSQL时解析空数组[]报错求助
问题解决:Bun ORM扫描jsonb数组字段报错
问题根源
你的Likes字段在模型中错误添加了array标签,导致Bun将其识别为PostgreSQL的数组类型(如jsonb[]),但实际数据库中存储的是单个jsonb值(内容为用户数组结构)。PostgreSQL数组的空值格式是{},而jsonb空数组是[],两者格式不匹配,因此扫描时报错。
解决方案
修改Photo模型中Likes字段的Bun标签,去掉array选项:
type Photo struct { bun.BaseModel `bun:"table:photos"` ID uuid.UUID `bun:"type:uuid,default:uuid_generate_v4(),pk" json:"-"` URL string `bun:"column:url"` UploadedBy model.User `bun:"column:uploaded_by,type:jsonb"` Description string `bun:"column:description"` // 去掉array标签,jsonb本身支持存储数组结构 Likes []model.User `bun:"column:likes,type:jsonb"` Liked bool `bun:"type:bool,scanonly"` Date time.Time `bun:"column:date"` Metadata Metadata `bun:"column:metadata,type:jsonb"` Tags []string `bun:"column:tags,array"` // Tags是PostgreSQL数组类型,保留array标签没问题 EventID uuid.UUID `bun:"column:event_id" json:"-"` Event *event.Event `bun:"rel:belongs-to,join:event_id=id" json:"event,omitempty"` }
说明
- PostgreSQL的
jsonb类型本身可以直接存储数组结构(如[{"email": "..."}]),无需将字段声明为PostgreSQL数组类型(jsonb[])。 - 你查询逻辑中的
jsonb_array_elements(COALESCE(likes, '[]'))是正确的,它处理的是jsonb内部的数组,无需修改。
内容的提问来源于stack exchange,提问作者Alejandro Otero Gómez
相关产品推荐
相关产品推荐

