基于通配符键查询嵌套JSON:PostgreSQL jsonb单查所有foo值
一步提取PostgreSQL jsonb中所有foo值的查询方案
嘿,这个需求完全不用靠Python循环来实现,PostgreSQL的JSON函数就能帮你一步搞定!
假设你的表名叫your_table,存储JSON数据的jsonb列叫json_data,每个JSON的结构是用timestamp作为键,每个键对应的值里包含foo字段。那你可以用下面的查询直接提取所有foo值:
基础查询(带timestamp键)
SELECT j.key AS timestamp_key, -- 保留原JSON中的timestamp键 j.value->>'foo' AS foo_value FROM your_table, jsonb_each(your_table.json_data) j;
原理说明:
jsonb_each(json_data)是PostgreSQL的内置函数,它会把每行的JSON对象拆分成多行记录,每行对应一个「键(timestamp)- 值(对应的子JSON)」对- 这里用逗号分隔
your_table和jsonb_each,其实是PostgreSQL对LATERAL JOIN的简写,能让原表的每一行都和它自己的JSON键值对展开结果做关联 j.value->>'foo'用来从每个子JSON里提取foo字段的文本值;如果需要保留JSON类型(比如foo是数字或布尔值),可以换成j.value->'foo'
简化版(只取foo值)
如果不需要保留timestamp键,只需要所有foo的值,可以简化成:
SELECT j.value->>'foo' AS foo_value FROM your_table, jsonb_each(your_table.json_data) j WHERE j.value ? 'foo'; -- 可选过滤:只保留包含foo字段的记录,避免出现NULL
这样一个查询就能替代你之前先获取所有键、再循环查询的流程,效率高多啦!
内容的提问来源于stack exchange,提问作者Bharat
相关产品推荐
相关产品推荐

