如何使用PostgreSQL表中现有数据更新JSONB列
PostgreSQL 更新列为基于现有字段的JSON对象
你不需要用jsonb_set来生成全新的JSON对象,直接用PostgreSQL提供的JSON构造函数就能实现需求:
1. 直接生成新JSON对象覆盖列(推荐)
如果json_object列是jsonb类型(推荐使用jsonb而非json),用jsonb_build_object直接构造对象并赋值:
UPDATE table_name SET json_object = jsonb_build_object('id', note_id, 'attribute', sentence) WHERE note_id = 12345;
如果是json类型,替换成json_build_object即可。
2. 基于现有JSON更新指定键(保留其他键)
如果需要保留json_object中已有的其他键值,只更新id和attribute这两个字段,才需要用到jsonb_set:
UPDATE table_name SET json_object = jsonb_set( jsonb_set(json_object, '{id}', to_jsonb(note_id)), '{attribute}', to_jsonb(sentence) ) WHERE note_id = 12345;
这里通过嵌套jsonb_set依次更新两个键,to_jsonb用来将字段值转为jsonb类型匹配列类型。
3. 替换整个现有JSON对象(用jsonb_set的写法)
如果一定要用jsonb_set实现完全替换,也可以指定空路径'{}':
UPDATE table_name SET json_object = jsonb_set( json_object, '{}', jsonb_build_object('id', note_id, 'attribute', sentence) ) WHERE note_id = 12345;
但这种写法和第一种直接构造的效果一致,没必要多此一举。
内容的提问来源于stack exchange,提问作者horcle_buzz
相关产品推荐
相关产品推荐

