PostgreSQL中如何替换JSON(非JSONB)字段内的指定条目?
PostgreSQL JSON类型字段修改指定键值
解决方案(PostgreSQL 12+)
直接使用json_set函数修改JSON字段中指定键的值,这是最简洁的方式:
UPDATE users SET settings = json_set(settings, '{foo}', '"three"') WHERE name = 'bob'; -- 按需添加WHERE条件,不添加则更新所有用户的settings字段
兼容低版本方案(PostgreSQL <12)
如果你的PostgreSQL版本低于12,不支持json_set,可以手动构建新的JSON对象:
UPDATE users SET settings = json_build_object( 'foo', 'three', 'bar', json_extract_path_text(settings, 'bar') ) WHERE name = 'bob';
这种方式需要显式保留原JSON中需要保留的键值对,适合键数量较少的场景。
验证结果
执行更新后,运行以下查询确认修改成功:
SELECT name, settings FROM users WHERE name = 'bob';
返回结果应为:
name | settings ---------------------------- "bob" | {"foo": "three", "bar": "two"}
内容的提问来源于stack exchange,提问作者joel
相关产品推荐
相关产品推荐

