Postgresql 更新jsonb列以在一个嵌套键中添加字符串列表
我的jsonb列(属性)如下所示:Postgresql 更新jsonb列以在一个嵌套键中添加字符串列表,postgresql,jsonb,Postgresql,Jsonb,我的jsonb列(属性)如下所示: { "key1" : "v1", "key2" : "v2", ... } 现在,我需要更新此列(属性),并在列中添加以下嵌套键/val: "Fruit":{ "Apple":{ "tags":[ "color_is_green", "taste_good", "smell_like_XX" ] } } 我想知道是否有一个postgresql查询可以直接更新此列 我试过: UPDATE <tab
{
"key1" : "v1",
"key2" : "v2",
...
}
现在,我需要更新此列(属性),并在列中添加以下嵌套键/val:
"Fruit":{
"Apple":{
"tags":[
"color_is_green",
"taste_good",
"smell_like_XX"
]
}
}
我想知道是否有一个postgresql查询可以直接更新此列
我试过:
UPDATE <table>
SET
properties = jsonb_set(properties,'{"Fruit","Apple","tags"}','"color_is_green","taste_good","smell_like_XX"');
最初,我们将整个properties列取出,并将其转换为java对象,然后在java代码中添加/删除属性。但现在由于数据库中有大量记录,取出所有属性并保存在内存中会导致性能问题(内存不足),他们提出了一个想法,即在查询中更新这些属性目录,看看它是否可以节省空间。您可以使用jsonb值
select
'{"key1" : "v1", "key2" : "v2"}':: jsonb
||
'{"Fruit": {"Apple": {"tags": ["color_is_green", "taste_good", "smell_like_XX"]}}}'::jsonb
?column?
---------------------------------------------------------------------------------------------------------------
{"key1": "v1", "key2": "v2", "Fruit": {"Apple": {"tags": ["color_is_green", "taste_good", "smell_like_XX"]}}}
(1 row)
因此,您可以通过以下方式更新表:
update my_table
set properties = properties ||
'{"Fruit": {"Apple": {"tags": ["color_is_green", "taste_good", "smell_like_XX"]}}}'::jsonb
where id = 1
但是,您应该记住,复杂的JSON结构使数据处理变得困难和低效。我的目标是将整个“水果”块插入原始属性列。我可以使用任何jsonb更新查询吗?重要的是,我不知道如何在“tags”字段中插入字符串数组。
update my_table
set properties = properties ||
'{"Fruit": {"Apple": {"tags": ["color_is_green", "taste_good", "smell_like_XX"]}}}'::jsonb
where id = 1