Как получить правильно данные?

Подскажите пожалуйста, есть вот такой запрос:

with comments_info as (
    select pc.post_id, jsonb_agg(to_jsonb("pc") - 'post_id') as comments
    from post_comments pc
             join "user" u on u.user_id = pc.user_id
    group by post_id
) select c.comments from post p
          left join comments_info c on c.post_id = p.id WHERE p.id = 1

получаю вот такой результат: [{id: 1, user_id: 1, description: "description"}] а нужно получить

[{id: 1, user_id: 1, description: "description", username: "username", user_logo: "logo"}]

то есть заджойнить так чтобы получить еще и username и user_logo, как это можно сделать? Модель user:

user_id PK
  email varchar
  password varchar
  username varchar
  user_logo varchar

Модель post_comments:

id PK
  post_id references post(id)
  user_id references user(id)
  description text

Ответы (1 шт):

Автор решения: Roman-Stop RU aggression in UA

Вам нужны две вещи:

  1. Функция создания jsonb из значений полей - jsonb_build_object
  2. Функция слияния двух jsonb - ||

Вот демо

В результате:

with comments_info as (
    select pc.post_id, 
       jsonb_agg((to_jsonb("pc") - 'post_id') || jsonb_build_object('username', u.username, 'user_logo', u.user_logo))
          as comments
    from post_comments pc
             join "user" u on u.user_id = pc.user_id
    group by post_id
) select c.comments from post p
          left join comments_info c on c.post_id = p.id WHERE p.id = 1
→ Ссылка