我有一个表,有两个列,一个是保存组号的索引,一个是jsonb数据列。
| Index | payload |
|----------------|----------------|
| 1 | {jsonb} |
| 1 | {jsonb} |
| 2 | {jsonb} |
| 2 | {jsonb} |然后,我想将有效载荷嵌套到另一个jsonb中,但它不能是一个数组。
预期产出:
| Index | payload |
|----------------|----------------|
| 1 |{{jsonb},{jsonb}}|
| 2 |{{jsonb},{jsonb}}|实际产出:
| Index | payload |
|----------------|----------------|
| 1 |[{{jsonb},{jsonb}}]|
| 2 |[{{jsonb},{jsonb}}]|
SELECT index, jsonb_agg(payload) as "payload"
FROM table1
GROUP BY 1
ORDER BY 1如您所见,输出确实会将列聚合到jsonb中,但也会将其转换为数组。可以删除数组吗?
发布于 2022-03-02 14:19:40
您可以创建自己的聚合,只需追加JSONB值:
create aggregate jsonb_append_agg(jsonb)
(
sfunc = jsonb_concat(jsonb, jsonb),
stype = jsonb
);然后你就可以:
SELECT index, jsonb_append_agg(payload) as "payload"
FROM table1
GROUP BY 1
ORDER BY 1https://stackoverflow.com/questions/71324030
复制相似问题