Postgres:跨行连接JSONB值?

时间:2016-09-15 13:22:54

标签: postgresql jsonb

我正在掌握Postgres中的JSONB功能> = 9.5(并且喜欢它)但是遇到了绊脚石。我已经阅读了关于连接JSON字段的能力,因此'{"a":1}' || '{"b":2}'创建了{"a":1,"b":2},但我希望在多行的同一字段中执行此操作。 e.g:

select row_concat_??(data) from table where field = 'value'

我发现jsonb_object_agg函数听起来就像我想要的那样,除了docs显示它带有多个参数,而我只有一个。

我有什么想法会这样做? jsonb_agg成功创建了一个数组,所以感觉我真的非常接近。

2 个答案:

答案 0 :(得分:6)

在Postgres中使用自定义聚合后,我有以下内容:

DROP AGGREGATE IF EXISTS jsonb_merge(jsonb);

CREATE AGGREGATE jsonb_merge(jsonb) (
    SFUNC = jsonb_concat(jsonb, jsonb),
    STYPE = jsonb,
    INITCOND = '{}'
)

然后可以用作:

SELECT group_id, jsonb_merge(data) FROM table GROUP BY group_id

答案 1 :(得分:2)

使用jsonb_each()

with data(js) as (
    values
    ('{"a": 1}'::jsonb),
    ('{"b": 2}')
)
select jsonb_object_agg(key, value)
from data
cross join lateral jsonb_each(js);

 jsonb_object_agg 
------------------
 {"a": 1, "b": 2}
(1 row)