如何将 postgresql 中 jsonb_path_query 的结果聚合到数组中?

How can I aggregate the results of a jsonb_path_query in postgresql to an array?

我有一个包含两列的 table,包含一个 ID 和一个 JSON 对象 (jsonb)。每个 json 对象包含嵌套在对象内部某处的多个值(例如 url)。我可以使用 jsonb_path_query 使用 [*] 提取所有这些值,但它们被 return 编辑为每行一个值。如何聚合 return 值,使结果 table 的行数与原始行数相同?

示例如下:

CREATE TABLE IF NOT EXISTS test (
  oid integer,
  object jsonb
  );

INSERT INTO test
VALUES 
    (1, '{"links": [
            {"title": "a", "url": "w"},
            {"title": "b", "url": "x"}
        ]}'),
    (2, '{"links": [
            {"title": "c", "url": "y"},
            {"title": "d", "url": "z"}
        ]}');

SELECT 
  oid,
  jsonb_path_query(object, '$.links[*].url')
FROM test;

select 查询 return 以下 table:

| oid | jsonb_path_query |
| --- | ---------------- |
|  1  |       w          |
|  1  |       x          |
|  2  |       y          |
|  2  |       z          |

不过,我想得到这个:

| oid | jsonb_path_query |
| --- | ---------------- |
|  1  |      [w,x]       |
|  2  |      [y,z]       |

使用 jsonb_path_query_array() - 它 returns 所有匹配作为 (JSON) 数组

SELECT oid,
       jsonb_path_query_array(object, '$.links[*].url')
FROM test;
oid | jsonb_path_query_array
----+-----------------------
  1 | ["w", "x"]            
  2 | ["y", "z"]