Обновите массив jsonb на один элемент без ключа, используя jsonb_set в postgresql - PullRequest
0 голосов
/ 29 мая 2018

У меня есть таблица audits с полем jsonb data, и она имеет содержимое:

"products": [
    {"id": 405, "color": null, "price": 850, "title": "test", "value": 52, "real_value": 105 }, 
    {"id": 347, "color": null, "price": 195, "title": "test2", "value": 69, "real_value": 0}
]

Для обновления необходимо знать ключ элемента, но я не знаю, какнайти ключ этого элемента (0).Пример:

UPDATE audits set data = jsonb_set(data::jsonb,'{"products",0,"real_value"}','125') where id = 10 and enterprise_id = 1;

Я пытался использовать это:

SELECT ( select index from generate_series(0, jsonb_array_length(data->'products') - 1) as index where data->'products'->index->>'id' = '347') as index_of_element FROM audits;, но это очень сложная операция для pg.

Также я знаю, как найти идентификатор продукта для этого объекта:

select id as possiton from audits where data->'products' @> '[{"id":347}]';, но не ключ в массиве (((*

Возможно, я могу использовать другую функцию для обновленияэлемент в массиве, но я не знаю, как.

...