Получить эквивалентный SQL-запрос для любой мета-команды Postgres

11

Надеюсь, название носит информативный характер. Я хочу как-то перевести любую мета-команду Postgres в соответствующий / соответствующий ей SQL-запрос, по крайней мере, узнать больше о Postgres и о том, как он хранит метаинформацию в своих таблицах.

Есть идеи, если это возможно?

Например:

При подключении к базе данных EXAMPLE \dtи SELECT table_schema,table_name FROM information_schema.tables ORDER BY table_schema,table_name;возвращать тот же результат.

Я хочу найти, если возможно, способ получения значения SELECT table_schema,table_name FROM information_schema.tables ORDER BY table_schema,table_name;при вводе \dtв функцию / макрос / что угодно.

BogdanSorlea
источник

Ответы:

17

Это просто и очень полезно: вы можете запустить psql с соответствующим переключателем (-E), чтобы получить информацию.

me@mystation:~/ > psql -E 
psql (9.3.11)
Type "help" for help.
me@mystation # \d
********* QUERY **********
SELECT n.nspname as "Schema",
  c.relname as "Name",
  CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 'f' THEN 'foreign table' END as "Type",
  pg_catalog.pg_get_userbyid(c.relowner) as "Owner"
FROM pg_catalog.pg_class c
     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','v','m','S','f','')
      AND n.nspname <> 'pg_catalog'
      AND n.nspname <> 'information_schema'
      AND n.nspname !~ '^pg_toast'
  AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1,2;

Загляните на http://www.postgresql.org/docs/current/static/app-psql.html для получения дополнительной информации. Попав в psql, вы также можете установить переменную ECHO_HIDDEN .

KookieMonster
источник
1
очень перспективно! но когда я пытаюсь получить определение таблицы с помощью 'psql -E mytable', он сообщает о нескольких запросах, ни один из которых не возвращает ничего полезного при индивидуальной выдаче, поэтому что-то не сообщается.
Philwalk