如何在PostgreSQL的jsonb对象顶层添加同级属性?
在PostgreSQL的JSONB顶层添加同级属性的最简方法
对于JSONB对象顶层添加新属性,最简洁高效的方式是使用||(JSONB合并操作符),尤其适合处理大对象场景,不需要复杂的路径指定。
示例实现
原JSONB对象:
{"example":123}
执行更新语句,添加property-to-add属性:
UPDATE mytable SET jsoncolumn = jsoncolumn || '{"property-to-add":"value"}'::jsonb WHERE id = 1;
修改后的JSONB对象:
{"example":123,"property-to-add":"value"}
原理说明
||操作符会直接合并两个JSONB对象:
- 若新对象中的键在原对象不存在,则直接添加为顶层属性
- 若存在重复键,新对象的键值会覆盖原对象的对应值(新增场景下无需担心覆盖问题)
对比其他方法(可选参考)
虽然也能用jsonb_set实现,但语法更繁琐:
UPDATE mytable SET jsoncolumn = jsonb_set(jsoncolumn, '{}', jsoncolumn || '{"property-to-add":"value"}'::jsonb, true) WHERE id = 1;
显然||操作符的写法更直观,执行效率也更高,尤其当JSONB对象较大时,避免了不必要的路径解析操作。
内容的提问来源于stack exchange,提问作者myol
相关产品推荐
相关产品推荐

