从postgresql中的jsonb数组中获取平面字符串形式的元素

从postgresql中的jsonb数组中获取平面字符串形式的元素,sql,arrays,postgresql,jsonb,Sql,Arrays,Postgresql,Jsonb,我有一个数据类型为jsonb的x列 这些值如下所示: [ {"key": "6cd", "type": "text1", "label": "label_text_1", "content": "description"}, {"key": "815", "type": "text2", "label": "label_text_2", "content": "desc2"} ] 如何通过Postgres查询返回包含所有元素的字符串数组? 大概是这样的: [“6cd”、“text1”、“lab

我有一个数据类型为jsonb的x列

这些值如下所示:

[
{"key": "6cd", "type": "text1", "label": "label_text_1", "content": "description"},
{"key": "815", "type": "text2", "label": "label_text_2", "content": "desc2"}
]
如何通过Postgres查询返回包含所有元素的字符串数组?

大概是这样的:


[“6cd”、“text1”、“label\u text\u 1”、“description”、“815”、“text2”、“label\u text\u 2”、“desc2”]

使用
jsonb\u数组元素(json\u列)
获取数组元素,使用
jsonb\u每个文本(elem)
获取这些元素中所有嵌套对象的值:

with my_table(id, json_column) as (
values(
    1, 
    '[
        {"key": "6cd", "type": "text1", "label": "label_text_1", "content": "description"},
        {"key": "815", "type": "text2", "label": "label_text_2", "content": "desc2"}
    ]'::jsonb)
)

select id, array_agg(val)
from my_table
cross join jsonb_array_elements(json_column) as a(elem)
cross join jsonb_each_text(elem) as e(key, val)
group by id

 id |                             array_agg                             
----+-------------------------------------------------------------------
  1 | {6cd,text1,label_text_1,description,815,text2,label_text_2,desc2}
(1 row) 

如果我想把你的想法应用到表之间的一个大连接查询中,在性能方面有很多json_列,你会怎么想?很难说,因为很多和大都是相对的概念。一般来说,您应该避免动态分解json文档,因为它总是代价高昂的。如果你的桌子要大的话,你最好不要。
select array_agg(value) from t
join lateral jsonb_array_elements(col) e(v)
on true 
join lateral jsonb_each_text(v)
on true