Monthly Archives: July 2019

Полезные мелочи PostgreSQL

Работа с JSON/JSONB

Формирование одного JSONB-объекта из двух столбцов, в одном из которых ключи, а в другом – значения, с группировкой по общему полю

Допустим, у нас есть таблица props в которой есть поля id, group_id, key, value, где group_id – поле, по которому значения группируются. И мы хотим выбрать для каждой группы json-объект со всеми значениями key:value:

select      
group_id,
jsonb_object(array_agg("key"), array_agg("value")) as tags
from
props
group by
group_id

Получение данных из Sentry (своей локальной инсталляции)

  1. Нужно выяснить ID своего проекта
  2. Выполнить следующий запрос, подставив вместо “40” номер проекта (ID):
with params as (
select
40 as project_id
),
dat as (
select
sm.id,
datetime,
sgm.message,
sgm.view,
sm.group_id,
jsonb_object(array_agg(fv."key"), array_agg(fv."value")) as tags
from
sentry_message as sm,
sentry_groupedmessage as sgm,
sentry_eventtag as et,
sentry_filtervalue as fv
where
fv.id = et.value_id
and
et.event_id = sm.id
and
sm.project_id = (select project_id from params)
and
sgm.id = sm.group_id
group by sm.id, datetime, sgm.message, sgm.view, sm.group_id
)
select * from dat