PostgreSQL中JSONB对象属性按X增量更新的SQL语句写法
PostgreSQL 增量更新JSONB字段指定属性的写法
你可以使用PostgreSQL内置的jsonb_set函数实现需求,该函数仅修改指定路径的JSON值,不会改动其余结构,适配9.5及以上版本。
通用SQL语句
将语句中的X替换为你需要的增量值即可:
UPDATE Reservation SET charges = jsonb_set( charges, '{total}', ((charges ->> 'total')::numeric + X)::jsonb ) -- 可自行补充WHERE条件筛选需要更新的行,例如 WHERE id = 123
容错优化写法
如果存在部分行的charges字段没有total属性的场景,可以加COALESCE做兼容,缺失total时默认按原值为0计算增量:
UPDATE Reservation SET charges = jsonb_set( charges, '{total}', (COALESCE((charges ->> 'total')::numeric, 0) + X)::jsonb )
效果示例
如果你需要将total的值加10,替换X为10执行后,原有JSONB结构中的charges数组内容会完全保留,仅total的值从0更新为10,最终结果为:
{"total": 10, "charges": [{"foo": "bar"}]}
内容的提问来源于stack exchange,提问作者Raj Chaudhary
相关产品推荐
相关产品推荐

