Обновите столбец jsonb, чтобы добавить список строк в один вложенный ключ - PullRequest
0 голосов
/ 17 октября 2019

Мой столбец (свойства) jsonb выглядит следующим образом:

{
"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"');

Но он выдал ошибку.

[22P02] ERROR: invalid input syntax for type json Detail: Expected end of input, but found ",". Position: 106 Where: JSON data, line 1: "obs_eng_status_faild",...

Первоначально мы извлекали весь столбец свойств и преобразовывали его в объект Java, а также добавляли / удаляли свойства в коде Java. Но теперь, из-за большого количества записей в БД, удаление всех свойств и сохранение в памяти приводят к снижению производительности (нехватке памяти), они приходят с идеей обновить каталог этих свойств в запросе и посмотреть, сможет ли он сэкономить место.

1 Ответ

1 голос
/ 17 октября 2019

Вы можете объединить значения 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 делают обработку данных сложной и неэффективной.

...