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

PostgreSQL查询jsonb字段属性值报语法错误的解决方法

错误原因

两次报错均来自对PostgreSQL jsonb操作符的误用:

  • -> 操作符获取jsonb字段属性后,返回值仍为jsonb类型。第一次查询时,你拿jsonb类型结果和text类型字符串直接比对,数据库会尝试将右侧的普通字符串解析为json格式,解析到空格分隔的Changed token时就会触发语法错误——合法的json字符串必须包裹在双引号内。
  • PostgreSQL不存在->->这个操作符,第二次查询属于操作符书写错误,因此直接触发无匹配操作符的报错。
正确实现方式

如果要获取jsonb字段中属性的原生文本值,需要使用->>操作符,该操作符返回值为text类型,可以直接和普通字符串做等值比对,正确SQL如下:

select * from event
where type = 'pickup-data-changed' 
  and data ->> 'comment' = 'Changed by recipient';

补充说明

你也可以通过显式类型转换的方式实现同等效果,但这种写法更冗余,且容易因为json转text自带的双引号踩坑,日常使用优先选->>即可:

-- 不推荐的冗余写法,::text转换后的json字符串自带外层双引号,比对时需要手动补上
select * from event
where type = 'pickup-data-changed' 
  and (data -> 'comment')::text = '"Changed by recipient"';

内容的提问来源于stack exchange,提问作者Ludwig

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:36:26