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

PostgreSQL 17.4中json_value()处理布尔值的行为疑问

这不是PostgreSQL的Bug,是预期行为

这两种写法的差异来自json_value函数的返回类型逻辑:

  • 当你省略returning jsonb时,json_value会将JSON值转换为对应的SQL原生标量类型。JSON的true对应PostgreSQL的boolean类型,而PostgreSQL中布尔值的文本表示就是t(真)和f(假),所以转成text后得到't'。
  • 当你指定returning jsonb时,json_value会直接返回JSONB类型的值,保留JSON原生的布尔格式true。此时转成text时,会输出JSON的原生字符串表示,也就是'true'。

你可以通过查看返回类型验证这一点:

-- 返回 boolean 类型
select pg_typeof(json_value(jsonb '[true]','$[0]'));
-- 返回 jsonb 类型
select pg_typeof(json_value(jsonb '[true]','$[0]' returning jsonb));

简单来说,returning子句是用来指定json_value的返回类型的——要么转成SQL类型,要么保留JSON类型,两种场景的文本输出自然不同,完全符合设计预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 03:04:51