Как добавить объект в поле postgresql jsonb при обновлении

Я хочу обновить свое поле jsonb, в котором хранится массив объектов. я хочу добавить в него новый объект.

CREATE TABLE justjson ( id INTEGER, doc JSONB);
INSERT INTO justjson VALUES ( 1, '[
  {
    "name": "abc",
    "age": "22"
  },
  {
    "name": "def",
    "age": "23"
  }
]');

тогда значение как

select doc from justjson;

doc
[{"age": "22", "name": "abc"}, {"age": "23", "name": "def"}]

Теперь я хочу добавить новый объект в этот jsonb

{"age": "45", "name": "xyz"}

Как я могу обновить это поле?

мой вывод, такой как

doc
    [{"age": "22", "name": "abc"}, {"age": "23", "name": "def"},{"age": "45", "name": "xyz"}]

person Sandip Mavani    schedule 10.10.2017    source источник
comment
Здесь можно найти Объединить два значения jsonb в новое значение jsonb.   -  person klin    schedule 10.10.2017


Ответы (1)


Используйте оператор конкатенации ||, чтобы добавить элемент в массив:

UPDATE justjson
SET doc = doc || '{"age": "45", "name": "xyz"}'::jsonb
WHERE is = 1;
person Laurenz Albe    schedule 10.10.2017
comment
Спасибо за этот фрагмент кода, который может оказать некоторую немедленную помощь. Правильное объяснение значительно улучшило бы его долгосрочную ценность, показав почему это хорошее решение проблема, и сделает ее более полезной для будущих читателей с другими похожими вопросами. Пожалуйста, отредактируйте свой ответ, чтобы добавить пояснения, включая сделанные вами предположения. - person Toby Speight; 10.10.2017
comment
@YvetteColomb Такой пылкий призыв не может остаться неуслышанным. - person Laurenz Albe; 10.10.2017
comment
@LaurenzAlbe Как я могу обновить в jsonb, например, я хочу установить возраст по имени Пример. где name = xyz установить age = 46 в таблице выше - person Sandip Mavani; 11.10.2017