以逗号分隔的列表形式返回 jsonb_array_elements 结果

Joe*_*cop 6 postgresql json jsonb postgresql-9.5

我正在访问一个jsonb字段中的数组(一个名为“choice_values”的 json 对象),并希望将其内容解析为逗号分隔的文本字段。

SELECT
    jsonb_array_elements(doc -> 'form_values' -> '8189' -> 'choice_values')
FROM
    field_data.exports;
Run Code Online (Sandbox Code Playgroud)

该 jsonb_array_elements 函数返回一个“文本集”,我想将其转换为包含在单个字段中的逗号分隔的数组值列表。

谢谢你。

kli*_*lin 6

集合返回函数(如jsonb_array_elements_text())可以在 SELECT 列表中调用,但它们不能在聚合函数中使用。

这是在 FROM 子句中调用 set 返回函数的好习惯,通常在横向连接中,如本例所示:

with the_data as (
    select '["alfa", "beta", "gamma"]'::jsonb as js
    )

select string_agg(elem, ',')
from 
    the_data, 
    jsonb_array_elements_text(js) elem;

   string_agg    
-----------------
 alfa,beta,gamma
(1 row)     
Run Code Online (Sandbox Code Playgroud)

所以你的查询应该是这样的:

select string_agg(elem, ',')
from 
    field_data.exports, 
    jsonb_array_elements_text(doc -> 'form_values' -> '8189' -> 'choice_values') elem;
Run Code Online (Sandbox Code Playgroud)