我有一个现有的表,其中的字段要解析为JSON对象,然后用JSON对象更新现有的列。
以下是我希望能够做到的(注:JSON对象中的所有值都是当前表中的值):
update table_name
set json_object = {"id": note_id, "attribute": sentence}
where note_id = 12345
字符串
我知道这是行不通的,我需要使用函数jsonb_set
(或类似的方法),但我发现的所有示例都没有使用表中现有的列/字段来构建JSON对象。
我有一个现有的表,其中的字段要解析为JSON对象,然后用JSON对象更新现有的列。
以下是我希望能够做到的(注:JSON对象中的所有值都是当前表中的值):
update table_name
set json_object = {"id": note_id, "attribute": sentence}
where note_id = 12345
字符串
我知道这是行不通的,我需要使用函数jsonb_set
(或类似的方法),但我发现的所有示例都没有使用表中现有的列/字段来构建JSON对象。
1条答案
按热度按时间rslzwgfq1#
可以使用任何表达式(包括列引用)作为
jsonb_set
的参数。看起来像是字符串
它设置现有
json_object
值的两个属性。注意,path
参数是一个text
数组(text[]
),如果愿意,也可以写为ARRAY['id']
。如果你不想更新现有的值,而是想用一个新的对象覆盖它,你可以使用
jsonb_set('{}', …)
,但这很麻烦。您更愿意使用jsonb_build_object
,这是一个接受键值对的可变参数函数,因此您可以编写型
这有时也用于更新,通过
||
运算符将新对象合并到现有值中,以避免许多属性的深度嵌套jsonb_set
表达式:型