#postgresql #jsonb
#postgresql #jsonb
Вопрос:
У меня есть простая таблица со jsonb
столбцом
CREATE TABLE things (
id SERIAL PRIMARY KEY,
data jsonb
);
с данными, которые выглядят как:
{
"id": 1,
"title": "thing",
"things": [
{
"title": "thing 1",
"moreThings": [
{ "title": "more thing 1" }
]
}
]
}
Итак, как мне добавить внутри глубоко вложенного массива, такого как moreThings
?
Для одноуровневого вложенного массива я мог бы сделать это, и это работает:
UPDATE posts SET data = jsonb_set(data, '{things}', data->'things' || '{ "text": "thing" }', true);
Но то же самое не работает для глубоко вложенных массивов:
UPDATE posts SET data = jsonb_set(data, '{things}', data->'things'->'moreThings' || '{ "text": "thing" }', true)
Как я могу добавить к moreThings
?
Ответ №1:
Это работает просто отлично:
UPDATE things
SET data =
jsonb_set(data,
'{things,0,moreThings}',
data->'things'->0->'moreThings' || '{ "text": "thing" }',
TRUE
)
WHERE id = 1;
Если у вас есть таблица, состоящая только из первичного ключа и jsonb
атрибута, и вы регулярно хотите манипулировать этим jsonb
в базе данных, вы, безусловно, делаете что-то неправильно. Ваша жизнь станет намного проще, если вы еще немного нормализуете данные.