PostgreSQL中JSONB字段totalBaseValue数值除法更新问题求助
PostgreSQL中更新JSONB对象内数值的正确方法
你的问题出在误用了jsonb_array_elements函数——这个函数是用来解析JSON数组的,但你的dynamic_fields是单个JSON对象,自然会报错"cannot extract elements from an object"。
直接用jsonb_set就能修改对象里的指定字段,不需要拆分数组操作,正确的更新语句如下:
UPDATE property_calculation SET dynamic_fields = jsonb_set( dynamic_fields, array['totalBaseValue'], to_jsonb((dynamic_fields ->> 'totalBaseValue')::numeric / 1000) ) WHERE dynamic_fields ? 'totalBaseValue'; -- 可选:只更新包含该键的记录,避免无意义操作
关键说明:
dynamic_fields ->> 'totalBaseValue':取出totalBaseValue的字符串值,转成numeric类型后除以1000to_jsonb(...):把计算后的数值转回JSONB格式jsonb_set(目标JSONB, 键路径数组, 新值):定位到指定键并替换其值- 最后的
WHERE条件是可选的,用来过滤掉不包含totalBaseValue的记录,提升效率
如果要先验证结果是否正确,可以先执行查询语句查看修改后的数据:
SELECT id, jsonb_set( dynamic_fields, array['totalBaseValue'], to_jsonb((dynamic_fields ->> 'totalBaseValue')::numeric / 1000) ) AS updated_dynamic_fields FROM property_calculation;
内容的提问来源于stack exchange,提问作者BalooSoft
相关产品推荐
相关产品推荐

