postgresql 如何使用postgres表中的现有数据更新JSONB列

iecba09b  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(124)

我有一个现有的表,其中的字段要解析为JSON对象,然后用JSON对象更新现有的列。
以下是我希望能够做到的(注:JSON对象中的所有值都是当前表中的值):

update table_name
set json_object = {"id": note_id, "attribute": sentence}
where note_id = 12345

字符串
我知道这是行不通的,我需要使用函数jsonb_set(或类似的方法),但我发现的所有示例都没有使用表中现有的列/字段来构建JSON对象。

rslzwgfq

rslzwgfq1#

可以使用任何表达式(包括列引用)作为jsonb_set的参数。看起来像是

UPDATE table_name
SET json_object = jsonb_set(jsonb_set(json_object, '{id}', note_id), '{attribute}', sentence)
WHERE note_id = 12345;

字符串
它设置现有json_object值的两个属性。注意,path参数是一个text数组(text[]),如果愿意,也可以写为ARRAY['id']
如果你不想更新现有的值,而是想用一个新的对象覆盖它,你可以使用jsonb_set('{}', …),但这很麻烦。您更愿意使用jsonb_build_object,这是一个接受键值对的可变参数函数,因此您可以编写

UPDATE table_name
SET json_object = jsonb_build_object('id', note_id, 'attribute': sentence)
WHERE note_id = 12345;


这有时也用于更新,通过||运算符将新对象合并到现有值中,以避免许多属性的深度嵌套jsonb_set表达式:

UPDATE table_name
SET json_object = json_object || jsonb_build_object('id', note_id, 'attribute': sentence)
WHERE note_id = 12345;

相关问题