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

PostgreSQL中双问号(??)在SQL查询中的含义是什么?

PostgreSQL中jsonb的??运算符解释

本质与作用

??是jsonb ?运算符的客户端转义写法,和?的功能完全一致:用于检查指定的键是否存在于jsonb对象的顶层键集合中。

你示例里的not (rr.jdoc ?? 'pivot'),等价于not (rr.jdoc ? 'pivot'),作用是筛选出jdoc字段顶层不包含pivot键的记录。

为什么要用??而非?

很多PostgreSQL客户端工具(比如psql、JDBC驱动、Hibernate这类ORM框架)会把单个?识别为参数化查询的占位符,用来绑定后续的动态参数值。如果直接写rr.jdoc ? 'pivot',客户端会误将?当成参数占位符,而非传递给PostgreSQL服务器的jsonb运算符,进而引发语法错误或参数绑定异常。

用两个??转义后,客户端会将其解析为单个?运算符发送给服务器执行,避免和参数占位符冲突。

参考依据

  • PostgreSQL官方文档中明确了jsonb的?运算符定义:检查jsonb对象是否包含指定顶层键(语法为jsonb ? text,返回布尔值)。
  • 主流客户端工具的转义规则:比如psql在执行参数化查询时,要求用??代替?来表示jsonb运算符;JDBC驱动也遵循此逻辑,避免占位符混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:15:29