Создать представление, вложив json текст из таблицы - Postgres - PullRequest
0 голосов
/ 30 марта 2020

Скажем, у меня есть следующая таблица postgres,

> select * from t;
+----+---------+-----------+---------+---------+
| id | a       | b         | c       | d       |
+----+---------+-----------+---------+---------+
| 1  | value_a | value_b   | value_c | value_d |
+----+---------+-----------+---------+---------+
...
+----+---------+-----------+---------+---------+
|... | ...     | ...       | ...     | ...     |
+----+---------+-----------+---------+---------+

Теперь я хочу создать представление из этой таблицы, которое может хранить данные следующего формата, имея вложенный текст json.

И это должно быть сгруппировано по столбцу id.

{
  "id": 1,
  "a": "A",
  "x":"{\"k1\":\"value_b\",\"k2\":\"{\"k21\":\"value_c\",\"k22\":\"value_d\"}\"}"
}

Я понятия не имею, как мне этого добиться. Любой, кто напишет мне запрос postgres sql для этого.

1 Ответ

1 голос
/ 30 марта 2020

Вы можете использовать функции json(b)_build_* для генерации json (b):

create view myview as
select 
    id,
    a,
    jsonb_build_object(
        'k1', b,
        'k2', jsonb_build_object(
            'k21', c,
            'k22', d
        )
    ) as x
from mytable

Если вы хотите, чтобы вся строка представляла собой один json объект:

create view myview as
select jsonb_build_object(
    'id', id
    'a', a,
     'x', jsonb_build_object(
        'k1', b,
        'k2', jsonb_build_object(
            'k21', c,
            'k22', d
        )
    )
) val
from mytable
...