Преобразование отношения один ко многим в столбец json в PostgreSQL - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь запросить две таблицы information_schema в PostgreSQL - таблицах и столбцах, чтобы получить следующий результат:

имя_таблицы - columns_as_json_array

Вид преобразования этой таблицы во многие отношение в json столбце массива. Я перепробовал множество различных методов и придумал что-то вроде этого:

SELECT t.table_name, c.json_columns
FROM information_schema.TABLES t
LEFT JOIN LATERAL(
  SELECT table_name, json_agg(row_to_json(tbc)) AS json_columns
  FROM information_schema.COLUMNS tbc
  WHERE t.table_name = tbc.table_name
  GROUP  BY table_name
  ) as c ON TRUE;

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

Есть идеи?

1 Ответ

2 голосов
/ 04 апреля 2020

Я не вижу смысла в боковом соединении здесь. Что касается проблем, вы можете получить ожидаемые результаты, агрегируя information_schema.columns:

select table_name, json_agg(row_to_json(c)) json_columns
from information_schema.columns c
group by table_name
order by table_name
...