PostgreSQL Оптимальная установка и удаление JSONB из вложенного массива - PullRequest
1 голос
/ 17 июня 2020

У меня есть объект jsonb следующего вида, где мне нужно добавить или удалить элементы из вложенного массива:

{
"GROUP_ONE": [
    "FIRST_ITEM",
    "SECOND_ITEM"
],
"GROUP_TWO": [
    "FIRST_ITEM",
    "SECOND_ITEM"
]
}

Функция обновления проходит:

  • x_id (table )
  • x_group (верхний уровень jsonb)
  • x_item (элемент для добавления или удаления элементов из вложенных массивов)
  • x_is_add (добавить или удалить).

Группа может существовать, а может и не существовать.

Оптимален ли этот код или есть ли лучший способ использовать для этого функции jsonb?

update table set list = (
case 
    when not x_is_add then jsonb_set(list, '{' || x_group || '}', (list->x_group) - x_item)
    when x_is_add and list->x_group is null then list || jsonb_build_object(x_group, array[x_item]) 
    when x_is_add and not list->x_group ? x_item then jsonb_set(list, '{' || x_group || '}', list->x_group || jsonb_build_array(x_item))
end) 
where id = x_id
...