У меня есть таблица, которую я не могу обновить, мы создаем другую таблицу для строк, которые необходимо изменить. Мы хотим создать представление поверх этих двух таблиц и изменить одно значение объекта столбца 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