Postgres 9.6 обновляет столбец jsonb, чтобы добавить новый атрибут со значением из запроса

У меня есть таблица xyz со столбцом jsonb метаданных в postgres.
Table : xyz column : metadata, type = jsonb

metadata = {"exceptions": {"first_exception": "first_value"} }

Я хочу добавить новый sub_attribute

desired metadata = {"exceptions": {"first_exception": "123"},{"second_exception": "234"}  }

Я могу использовать

update xyz 
SET metadata = jsonb_set(metadata->'exceptions', '{second_exception}', '"234"', true). 

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


person RAJKUMAR PADILAM    schedule 27.02.2018    source источник
comment
чтобы немного облегчить, можно добавить операторы создания таблицы?   -  person Jim Jones    schedule 27.02.2018
comment
Добавляю структуру. Я просто хочу знать, как использовать вывод запроса в качестве значения для добавляемого нового атрибута.   -  person RAJKUMAR PADILAM    schedule 27.02.2018


Ответы (1)


Ты можешь сделать

UPDATE xyz
SET metadata = jsonb_set(metadata, '{exceptions, second_exception}', other.value::jsonb)
FROM other
WHERE other.column = xyz.column

Обратите внимание, что {"exceptions": {"first_exception": "123"},{"second_exception": "234"}} не является допустимым json, и обновление даст вам следующий результат {"exceptions": {"first_exception": "123", "second_exception": "234"}}

person khoroshevj    schedule 27.02.2018