Raj*_*mar 5 postgresql append jsonb
我是在 postgresql 中使用 jsonb 的新手。
I have a following structure
[
{
"Id":1,
"Name":"Emilia"
},
{
"Id":2,
"Name":"sophia"
},
{
"Id":3,
"Name":"Anna"
},
{
"Id":4,
"Name":"Marjoe"
}
]
Run Code Online (Sandbox Code Playgroud)
{"Id":5,"Name":"Linquin"}到此数组中。并将其设置回 jsonb 列项目。我需要这样的东西。
[
{
"Id":1,
"Name":"Emilia"
},
{
"Id":2,
"Name":"sophia"
},
{
"Id":3,
"Name":"Anna"
},
{
"Id":4,
"Name":"Marjoe"
},
{
"Id":5,
"Name":"Linquin"
}
]
Run Code Online (Sandbox Code Playgroud)
感谢任何帮助。谢谢...
使用串联运算符 || 将元素附加到数组:
UPDATE s101
SET j = j || '{"Id":5,"Name":"Linquin"}'::jsonb
WHERE id = 1;
Run Code Online (Sandbox Code Playgroud)
为了向数组添加新元素jsonb,正如@VaoTsun所说,您可以使用连接
select j||'{"Id":5,"Name":"Linquin"}'::jsonb as newjosn from (
select '[
{
"Id":1,
"Name":"Emilia"
},
{
"Id":2,
"Name":"sophia"
},
{
"Id":3,
"Name":"Anna"
},
{
"Id":4,
"Name":"Marjoe"
}
]'::jsonb as j
) t
Run Code Online (Sandbox Code Playgroud)
要根据 id 删除元素,一种方法是:(例如删除元素 which id=2)
select to_jsonb(array_agg(lst)) as newjson from (
select jsonb_array_elements('[
{
"Id":1,
"Name":"Emilia"
},
{
"Id":2,
"Name":"sophia"
},
{
"Id":3,
"Name":"Anna"
},
{
"Id":4,
"Name":"Marjoe"
}
]'::jsonb) as lst
) t
where lst->'Id' <> '2'
Run Code Online (Sandbox Code Playgroud)
因此,该方法只是获取所有 json 数组值作为 json 元素的记录,然后选择除 element 之外的所有元素id=2,然后从所选记录中再次生成 json 数组。
请注意,如果您实际需要更新列,则此方法要求表应具有唯一/标识列(id通常为列),因为每个 json 数组应按其自己的id列进行分组。(不要将其id与 json 数组Id字段混合)。