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

PostgreSQL中保留结构提取JSONB文档部分内容的方法

解决PostgreSQL JSONB仅保留指定键的问题

嘿,我懂你刚接触PostgreSQL JSONB时的这种困惑——提取内容还得保留结构确实容易踩小坑。你之前的思路方向是对的,只是差了一点点类型匹配的细节:

问题根源

你第一次用content -> 'fr' as content,这个操作符本来就只会提取fr对应的值,不会保留外层的键名,所以结果里自然看不到fr;而你用json_build_object时,它返回的是json类型,但你的content字段是jsonb类型,类型不匹配可能导致结果不符合预期。

正确解法

直接用PostgreSQL专门为JSONB设计的jsonb_build_object函数,它会返回jsonb类型,完美匹配你的字段类型:

SELECT id, status, jsonb_build_object('fr', content -> 'fr') AS content 
FROM posts;

如果坚持想用json_build_object,只需要把结果转成jsonb类型也能达到效果:

SELECT id, status, json_build_object('fr', content -> 'fr')::jsonb AS content 
FROM posts;

效果验证

假设你的content字段原本是:

{"fr": {"title": "Bonjour le monde"}, "en": {"title": "Hello World"}, "es": {"title": "Hola Mundo"}}

执行上面的SQL后,返回的content字段就会是:

{"fr": {"title": "Bonjour le monde"}}

完全符合你想要的结构。

内容的提问来源于stack exchange,提问作者maxim darré

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:34:14