Я хочу объединить или я должен сказать обновить несколько столбцов jsonb в postgres

#sql #json #postgresql

#sql #json #postgresql

Вопрос:

У меня есть столбец как sensor_info, который имеет столбец типа jsonb. Столбец может содержать следующее

 {"temp":54, "humidity":34}
{"pressure":34}
{"switch":"on"}
{"temp":60, "humidity":78}
  

Это может рассматриваться как несколько записей одного столбца. В этих записях я должен сгруппировать их в один столбец с последним значением ключа.
Нравится-

 {"temp":60, "humidity":78, "pressure":34, "switch":"on"}
  

Я пытался, json_agg но он возвращает что-то вроде [{"temp":54, "humidity":34},{"pressure":34},{"switch":"on"},{"temp":60, "humidity":78}]

Комментарии:

1. Я использую postgresql

Ответ №1:

Для этого нет встроенной функции. Но вы можете легко определить свой собственный:

 create aggregate jsonb_merge_agg(jsonb) 
(
  sfunc = jsonb_concat(jsonb, jsonb),
  stype = jsonb
);
  

Затем вы можете использовать его следующим образом:

 select jsonb_merge_agg(sensor_info)
from the_table;
  

Значение JSON может содержать каждый ключ только один раз, и в совокупности будет сохранен «последний». Если вы хотите контролировать, какой ключ является «последним», вам нужно и порядок, например jsonb_merge_agg(sensor_info order by created_at)

Комментарии:

1. Это фактически решило мою проблему, спасибо. А также спасибо за руководство.