Как обновить JSONB для добавления нового ключа во вложенный массив (для всех элементов массива) для всех записей.
Я имею в виду ссылку Структура таблицы :
CREATE TABLE orders (
id serial PRIMARY KEY,
data jsonb
);
Дано json:
{
"Number": "555",
"UserId": "1",
"Items": [
{
"ProductId": "1",
"Name": "TV",
"Price": "300.00"
},
{
"ProductId": "2",
"Name": "Mechanical Keyboard",
"Price": "120.00"
}
]
}
Для добавления нового элемента в каждый элемент массива выдается следующий запрос:
UPDATE orders
SET data = jsonb_set(
data,
'{Items}', -- the array in which we operate
to_jsonb(
(WITH ar AS(
WITH temp AS(
SELECT data->'Items' AS items -- the array in which we operate
FROM orders
WHERE id = 1 -- the filtered order we are updating
)
SELECT jsonb_set(
jsonb_array_elements(items),
'{Quantity}', -- the new field we are adding
'"1"', -- the value of the new field
true)
FROM temp)
SELECT (array_agg(ar.jsonb_set))
FROM ar)),
false)
WHERE id = 1;
Вывод после выполнения запроса выше:
{
"Number": "555",
"UserId": "1",
"Items": [
{
"ProductId": "1",
"Name": "TV",
"Price": "300.00",
"Quantity": "1"
},
{
"ProductId": "2",
"Name": "Mechanical Keyboard",
"Price": "120.00",
"Quantity": "1"
}
]
}
Но выше будет обновлять json только там, где id=1
. Какие изменения необходимы для обновления JSON так же, как указано выше для всех строк в заказах?