обновите jsonb с вложенным псевдонимом jsonb_set

#sql #postgresql #jsonb

Вопрос:

У меня есть вложенный запрос, который обновляет сложный столбец jsonb. Я написал его как вложенные функции jsonb_set, которые отлично работают, но не настолько удобочитаемы. Есть ли способ использовать некоторые псевдонимы, содержащие определенный набор jsonb_set, поэтому в основном запросе будут использоваться только псевдонимы?

Код, который у меня есть, выглядит так:

 UPDATE table
SET jsonbColumn = jsonb_set(coalesce(
                        jsonb_set(coalesce(
                            jsonb_set(coalesce(
                                  jsonb_set(coalesce(
                                        jsonb_set(coalesce(
                                              jsonb_set(coalesce(
jsonb_set(coalesce(field1,'{}'), '{path_to_field1}', to_jsonb(new_value1)),
'{}'), '{path_to_field2}', to_jsonb(new_value2)), '{}'),
....)
 

Я ищу способ использовать некоторые переменные/разделение для шагов без отправки дополнительных запросов на ОБНОВЛЕНИЕ.

Я пробовал использовать С:

 WITH field1_alias AS (jsonb_set(coalesce(field1,'{}'), '{path_to_field1}', to_jsonb(new_value1))
WITH field2_alias AS (jsonb_set(coalesce(jsonb_set(coalesce(field1_alias,
'{}'), '{path_to_field2}', to_jsonb(new_value2)), '{}'))
 

но я получаю синтаксические ошибки при использовании jsonb_set подобным образом.
так что основной запрос будет использовать псевдоним, который рекурсивно вызывает предыдущие.

 UPDATE table SET jsonbColumn = fieldN_alias