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

PostgreSQL表JSON字段追加与替换问题:追加操作未生效

PostgreSQL JSON字段更新问题解决

你的UPDATE语句存在几个关键问题,导致第一条记录更新失败:

  • 语法错误:提取JSON键值时,键名必须用单引号包裹,应写成field->>'place'而非field->>place;PostgreSQL中字符串常量要用单引号,双引号用于标识表/列名,所以"NYC"要改成'NYC'。
  • 操作符误用:字符串连接需用||,+是数值加法运算符,不能用于字符串拼接。
  • JSON字段修改逻辑错误:->>返回的是文本类型,无法直接赋值修改原JSON字段,必须通过JSON函数修改整个JSON对象。

正确更新语句(分字段类型)

若field是json类型:

-- 给id=1的记录追加"NYC"
UPDATE your_table_name
SET field = json_set(
    field,
    '{place}',
    to_json((field->>'place') || ',NYC')
)
WHERE id = 1;

-- 将id=2的记录place替换为"SFO"
UPDATE your_table_name
SET field = json_set(
    field,
    '{place}',
    to_json('SFO'::text)
)
WHERE id = 2;

若field是jsonb类型(推荐使用,支持更多JSON操作):

-- 给id=1的记录追加"NYC"
UPDATE your_table_name
SET field = jsonb_set(
    field,
    '{place}',
    to_jsonb((field->>'place') || ',NYC')
)
WHERE id = 1;

-- 将id=2的记录place替换为"SFO"
UPDATE your_table_name
SET field = jsonb_set(
    field,
    '{place}',
    to_jsonb('SFO'::text)
)
WHERE id = 2;

补充说明

  • json_set/jsonb_set的第二个参数{place}是JSON路径,指定要修改的键
  • to_json/to_jsonb用于将文本转换为对应JSON类型,保证字段类型匹配
  • 记得把your_table_name替换为实际表名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:50:26