PostgreSQL запросить список всех имен таблиц?

140

Есть ли какой-либо запрос для списка всех таблиц в моей базе данных Postgres.

Я опробовал один запрос:

SELECT table_name FROM information_schema.tables
                      WHERE table_schema='public' 

Но этот запрос также возвращает представления.

Как я могу получить только имена таблиц, а не представления?

Теги:
postgresql-9.2

6 ответов

227

Какой бот этот запрос (на основе описания из руководство)?

SELECT table_name
  FROM information_schema.tables
 WHERE table_schema='public'
   AND table_type='BASE TABLE';
  • 2
    это лучший ответ здесь.
  • 1
    Что такое тип таблицы?
Показать ещё 1 комментарий
32

Если вам нужен список базы данных

SELECT datname FROM pg_database WHERE datistemplate = false;

Если вы хотите, чтобы список таблиц из текущей установки pg всех баз данных

SELECT table_schema,table_name FROM information_schema.tables
ORDER BY table_schema,table_name;
  • 0
    По крайней мере, в Postgres 9.5 это не так. У меня есть 3 базы данных в одном кластере, и это только возврат таблиц из текущей базы данных.
  • 0
    В документации сказано только текущее: postgresql.org/docs/9.5/static/infoschema-tables.html "table_catalog sql_identifier Имя базы данных, содержащей таблицу (всегда текущая база)"
27

Откройте терминал postgres с нужной таблицей данных:

psql dbname (run this line in a terminal)

тогда запустите эту команду в среде postgres

\d

Это будет описывать все таблицы по имени. В основном список таблиц по имени возрастает.

Затем вы можете попробовать это, чтобы описать таблицу по полям:

\d tablename.

Надеюсь, что это поможет.

  • 0
    @Wingedpanther как? есть опция \d для перечисления только всех таблиц, без индекса, без seq, ...?
  • 4
    \dt не для этого?
6

Как насчет дать \dt в psql? См. Https://www.postgresql.org/docs/current/static/app-psql.html.

6
select 
 relname as table 
from 
 pg_stat_user_tables 
where schemaname = 'public'

select 
  tablename as table 
from 
  pg_tables  
where schemaname = 'public'
  • 1
    pg_stat_user_tables может не заполняться, если track_activities отключен. Использование «официального» API, такого как pg_tables или information_schema.table является гораздо лучшим выбором.
  • 0
    @a_horse_with_no_name см. обновление помощник :)
-2

Попробуй это:

SELECT table_name 
FROM information_schema.tables 
WHERE table_schema='public' AND table_type='BASE TABLE'

этот работает!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню