У меня есть объект 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