You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 00:54:59