PostgreSQL:移除JSONB数组中每个元素的指定键
解决方案
可以通过拆解JSONB数组、逐个处理元素、重新聚合的方式实现批量移除每个元素的"b"键,具体SQL语句如下:
SELECT json_build_object( 'id', s.id, 'key', json_build_object( 'key', (SELECT jsonb_agg(elem - 'b') FROM jsonb_array_elements(s.column) AS elem) ) ) FROM "table" s;
步骤说明:
- 使用
jsonb_array_elements(s.column)将JSONB数组拆分为单个JSONB对象(每行对应一个数组元素); - 对每个拆分出的元素
elem,通过elem - 'b'直接移除其中的"b"键; - 用
jsonb_agg()将处理后的单个元素重新聚合为完整的JSONB数组; - 最后将处理后的数组嵌入你原本需要的JSON结构中。
如果需要直接更新表内的JSONB列(而非仅查询结果),可使用以下UPDATE语句:
UPDATE "table" s SET column = (SELECT jsonb_agg(elem - 'b') FROM jsonb_array_elements(s.column) AS elem);
内容的提问来源于stack exchange,提问作者Michael Gallego
相关产品推荐
相关产品推荐

