You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL 15.1如何从JSONB数组中移除指定元素?

移除JSONB数组中指定ID元素的PostgreSQL函数

针对你的需求,这里提供一个适配PostgreSQL 15.1的函数,可接收JSONB数组和要移除的ID参数,返回过滤后的数组:

CREATE OR REPLACE FUNCTION remove_jsonb_element(p_jsonb jsonb, p_remove_id integer)
RETURNS jsonb AS $$
BEGIN
  RETURN (
    SELECT jsonb_agg(elem)
    FROM jsonb_array_elements(p_jsonb) AS elem
    WHERE (elem->>'id')::integer != p_remove_id
  );
END;
$$ LANGUAGE plpgsql IMMUTABLE;

函数逻辑说明

  • jsonb_array_elements(p_jsonb):将输入的JSONB数组拆分为单个元素的行集合
  • (elem->>'id')::integer:提取每个元素的id字段(先转为文本再转整数,确保类型匹配)
  • WHERE子句:过滤掉ID等于目标值的元素
  • jsonb_agg(elem):将剩余元素重新聚合为JSONB数组

用法示例

传入你提供的原始JSONB数据和要移除的ID(102):

SELECT remove_jsonb_element(
  '[
    {"id":101,"content":"lorem ipsum", "username":"user_1"},
    {"id":102,"content":"lorem ipsum", "username":"user_2"},
    {"id":103,"content":"lorem ipsum", "username":"user_3"}
  ]'::jsonb,
  102
);

执行后将返回预期结果:

[
  {"id":101,"content":"lorem ipsum", "username":"user_1"},
  {"id":103,"content":"lorem ipsum", "username":"user_3"}
]

表列场景使用

如果JSONB数据存储在表列中,可直接在查询中调用函数:

SELECT remove_jsonb_element(your_jsonb_column, 102) AS filtered_data
FROM your_table;

补充说明

你之前尝试jsonb_array_elements未成功,大概率是因为拆分元素后没有用jsonb_agg重新聚合为数组,导致返回单个元素行而非完整数组。

内容的提问来源于stack exchange,提问作者Karthik S K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 15:27:16