假设我的jsonb列中有这个json。
{
"fields": [
{
"name": "firstName",
"age": 17
},
{
"name": "lastName",
"age": 25
},
...
}
如何在不使用索引的情况下仅更新"名字"?
到目前为止我有这个,但这是使用我不想使用的索引
UPDATE person
SET
field = jsonb_set(field,
concat('{fields, 0, name'}')::text[],
'new value'::jsonb,
TRUE)
您需要取消嵌套数组元素,替换所需的数组元素,然后将它们聚合回来:
update the_table tg
set data = data||(select jsonb_build_object(
'fields', jsonb_agg(case
when t.j ->> 'name' = 'firstName'
then t.j||'{"name": "new_name"}'
else t.j
end))
from jsonb_array_elements(tg.data -> 'fields') as t(j))
where ....;
在线示例:https://rextester.com/BZVKD68215