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
相关产品推荐
相关产品推荐

