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

PostgreSQL中如何更新JSON数组内的JSON对象值?

PostgreSQL jsonb数组更新:修改指定键值的正确SQL语句

错误原因

报错ERROR: path element at position 1 is not an integer: "2023-03-01"是因为你的列是jsonb数组类型,数组的路径定位必须使用整数索引(对应数组元素的位置),而你直接将字符串键"2023-03-01"作为路径元素,不符合数组的路径规则。

解决方案

根据你的需求场景,选择对应的SQL语句:

场景1:修改数组中所有对象的指定键值

如果数组内每个元素都是JSON对象,且需要把所有包含"2023-03-01"键的元素值改为true:

UPDATE your_table
SET jsonb_array_col = (
  SELECT jsonb_agg(
    CASE 
      WHEN elem ? '2023-03-01' 
      THEN elem || '{"2023-03-01": true}'::jsonb 
      ELSE elem 
    END
  )
  FROM jsonb_array_elements(jsonb_array_col) AS elem
)
WHERE mobile = '你的目标手机号';
  • 逻辑:用jsonb_array_elements展开数组,逐个检查元素是否包含目标键,包含则用||运算符覆盖键值,最后用jsonb_agg重新聚合为数组。

场景2:修改数组中特定位置元素的指定键值

如果只需要修改数组中某一个位置(比如第1个元素,索引为0)的对象键值:

UPDATE your_table
SET jsonb_array_col = jsonb_set(
  jsonb_array_col, 
  '{0, "2023-03-01"}',  -- 0是数组元素的索引,按需修改
  'true'::jsonb
)
WHERE mobile = '你的目标手机号';
  • 逻辑:jsonb_set的路径参数先指定数组的整数索引,再指定对象的字符串键,这样就能准确定位到数组内对象的目标键进行修改。

内容的提问来源于stack exchange,提问作者abhi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:50:11