LINUX.ORG.RU

PostgreSQL, JSON

 ,


0

1

Подскажите пожалуйста: мне нужно хранить в одной строке (в одном поле) множество JSON объектов. Как лучше организовать их добавление?

> CREATE TABLE jsonb_tab (data jsonb);
> INSERT INTO jsonb_tab VALUES ('{ "xxx": [] }');
> SELECT * FROM jsonb_tab;
    data     
-------------
 {"xxx": []}

Те как лучше мне добавлять объекты в массив xxx?

Понятно что можно делать SELECT менять ВСЕ содержимое data на клиенте и засылать обратно ВСЕ содержимое, можно ли добавлять объекты?

Что то типа:

UPDATE SET data=magick_function(data, 'xxx', '{ «a» : «1» }');

чтобы потом SELECT выдал:

> SELECT * FROM jsonb_tab;
    data     
-------------
 {"xxx": [{"a" : "1"}]}

★★★★

Последнее исправление: quest (всего исправлений: 1)

главный смысл: нужно добавлять данные в поле, пусть это будет не обязательно поле типа json, например поле типа массив в который добавлять текст

quest ★★★★
() автор топика

Вообщем ребята это делается так:

create table ttt (x jsonb[]);
insert into ttt (x) values (ARRAY ['{ "a" : 0 }'::jsonb]);
update ttt set x = x || '{ "a" : 1 }'::jsonb;
select array_to_json(x) FROM ttt;
quest ★★★★
() автор топика
create table t(a integer[]);
insert into t(a) values(ARRAY[]::integer[]);
update t set a = array_append(a::integer[], 1);
update t set a = array_append(a::integer[], 2);
update t set a = array_append(a::integer[], 3);
anonymous
()
Ответ на: комментарий от anonymous

угу, спасибо. какие-то ограничения на размер массива есть? сколько может быть элементов? думаю явно больше 65536

quest ★★★★
() автор топика
Ответ на: комментарий от quest

влил в массив миллионы ячеек - живет но время добавления начинает постепенно увеличиватся. У меня до такого не дойдет

quest ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.