代码之家  ›  专栏  ›  技术社区  ›  Vas Mil

Postgres中的JSONB转换为正则数组

  •  0
  • Vas Mil  · 技术社区  · 6 年前

    我有下表:

    "Id"|                  "Data"
    ====+================================================
    1   | { "emp": [ 
        |            {"id": "a1", "otherdata": "other"}, 
        |            {"id": "a2", "otherdata": "other"} 
        |          ]
        | }
    ----+------------------------------------------------
    2   | { "emp": [ 
        |            {"id": "b1", "otherdata": "other"}, 
        |            {"id": "b2", "otherdata": "other"} 
        |          ]
        | }
    -----------------------------------------------------
    

    其中“data”是jsonb。

    我需要创建这种类型的临时表:

    "Id"| "Emp"
    ====+=============
    1   | {"a1", "a2"}
    ----+-------------
    2   | {"b1", "b2"}
    

    我该怎么做?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Andy N    6 年前

    使用 jsonb_to_recordset 要将数组值提取到行中,请对它们进行分组,然后使用 array_to_json .

    SELECT a.id, array_to_json(array_agg(b.id)) AS emp
    FROM mytable a
    CROSS JOIN jsonb_to_recordset(a.data->'emp') AS b(id text)
    GROUP BY a.id;
    

    SQL Fiddle