#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