在 postgres 中展平 JSONB 数组

Flattening JSONB array in postgres

我正在使用 Postgres 9.4 并将我的数据存储为 JSONB 数组。我正在寻找一种方法来提取数组中的 json 元素,并使用 psql 将它们替换为一个串联的 json 元素。考虑以下 table 的示例:

'aaa' | [{"a":"foo"},{"b":"bar"},{"c":["baz", 'boom']}]  | 404
'bbb' | [{"bar":"foo"}]                                  | 501

我希望实现的目标是:

'aaa' | {"a":"foo", "b":"bar", "c":["baz", "boom"]}     | 404
'bbb' | {"bar":"foo"}                                   | 501

我尝试使用 json 类型的内置 postgres 函数来实现它。但我只是想出了如何在确切位置提取元素。 提前致谢。

SELECT  id, jo.obj
FROM    mytable
CROSS JOIN
        LATERAL
        (
        SELECT  JSON_OBJECT_AGG(jt.key, jt.value) obj
        FROM    JSONB_ARRAY_ELEMENTS(data) je
        CROSS JOIN
                LATERAL JSONB_EACH(je.value) jt
        ) jo