如何用短查询展平含数组的PostgreSQL JSONB对象?
Postgres JSONB 动态键值转行列解决方案
可以通过 jsonb_each 和 unnest 两个Postgres函数组合实现,无需固定keys,查询语句如下:
SELECT data->>'id' AS id, obj.key AS keys, unnest(obj.value::text[]) AS values FROM 你的表名, jsonb_each(data->'someObject') AS obj;
语句说明:
data->>'id':提取JSONB顶层的id字段,转换为文本类型作为结果的id列jsonb_each(data->'someObject'):将someObject对象动态拆分为多行,每行对应一个键值对,obj.key是动态的键名(如key1、key2),obj.value是对应的JSONB数组unnest(obj.value::text[]):将JSONB数组转换为Postgres原生文本数组,再通过unnest展开为单独的行,每个数组元素对应一行的values列
如果你的JSONB数组包含非字符串类型,可根据实际类型调整转换逻辑(比如obj.value::int[]处理整数数组)。
内容的提问来源于stack exchange,提问作者Abhinav
相关产品推荐
相关产品推荐

