Как изменить значение объекта jsonb при создании представления? - PullRequest
0 голосов
/ 12 июня 2019

У меня есть таблица, которую я не могу обновить, мы создаем другую таблицу для строк, которые необходимо изменить. Мы хотим создать представление поверх этих двух таблиц и изменить одно значение объекта столбца jsonb. Я использую jsonb_set, но он не работает.

Это для Postgres 9.6.

Основная таблица имеет 2 столбца: ключ, столбец jsonb Новая таблица имеет 2 столбца: ключ, столбец new_object_value (текстовое поле)

select
key,
case when t2.new_object_value is not null
then jsonb_set(mt.jsonb_column, '{object}', t2.new_object_value::text::jsonb)
else mt.jsonb_column
from main_table mt
left join new_table t2 using(key)

Когда значение t2.new_object_value не равно нулю, мы хотим изменить «объект» в jsonb_column с main_table на значение t2.new_object_value, в противном случае мы хотим сохранить исходный объект jsonb без изменений.

Редактировать: новый регистр (это был столбец json, а не jsonb в основной таблице)

case when t2.new_object_value is not null
then jsonb_set(mt.jsonb_column::jsonb, '{object}', to_jsonb(t2.new_object_value))::json
 else mt.jsonb_column
...