Список всех таблиц в postgresql information_schema


205

Каков наилучший способ перечислить все таблицы в information_schema PostgreSQL?

Чтобы уточнить: я работаю с пустой БД (я не добавил ни одной из своих собственных таблиц), но я хочу видеть каждую таблицу в структуре information_schema.

Ответы:


281

Вы должны просто запустить select * from information_schema.tablesсписок всех таблиц, управляемых Postgres для конкретной базы данных.

Вы также можете добавить, where table_schema = 'information_schema'чтобы увидеть только таблицы в информационной схеме.


4
Спасибо, я только что попробовал: / dt (звездочка). (Звездочка) это что-то другое?
littleK

Я ничего не знаю о / dt (звездочка). (Звездочка), извините. Я просто запустил запрос на выборку в postgres, и он перечислил информацию обо всех таблицах в нем. Попробуйте запустить оператор select (на вашей пустой базе данных) и посмотрите, что он возвращает.
RodeoClown

Попытка вышеупомянутой команды перечисляет следующие таблицы в information_schema: sql_features, sql_implementation_info, sql_languages, sql_packages, sql_parts, sql_sizing, sql_sizing_profiles ..... Так в чем разница между этими таблицами и таблицами в information_schema.tables?
littleK

2
Все таблицы, которые вы перечислили (с помощью команды / dt), предоставляют метаинформацию о базе данных. Каждая из перечисленных таблиц показывает различную информацию. Так, например, в таблице information_schema.tables перечислены все таблицы в базе данных и их атрибуты (например, возможность увидеть, является ли она таблицей или представлением, каково ее имя, и другая подобная информация). Таблица information_schema.sql_features покажет, какие функции включены в базе данных (поэтому я вижу, что в моей базе данных поддерживается Embedded C, а также прямой SQL).
RodeoClown

1
Вы можете запустить select * для каждой из таблиц, перечисленных командой dt - она ​​только что показала вам список таблиц, содержащих метаданные в базе данных.
RodeoClown

114

Для перечисления ваших таблиц используйте:

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

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


Как насчет таблиц, которые вы не создаете, но у вас есть права доступа?
Хай

4
Это покажет только таблицы в общедоступной схеме. Вы можете создавать таблицы в других схемах.
Джо Ван Дейк

Также это не будет различать таблицы и представления.
Джаярджо

44
\dt information_schema.

изнутри psql, должно быть в порядке.


14

«\ Г» COMMAND также хороший способ список таблиц , когда внутри интерактивной сессии Psql.

например.

# psql -d mcdb -U admin -p 5555
mcdb=# /z
                           Access privileges for database "mcdb"
 Schema |              Name              |   Type   |           Access privileges
--------+--------------------------------+----------+---------------------------------------
 public | activities                     | table    |
 public | activities_id_seq              | sequence |
 public | activities_users_mapping       | table    |
[..]
 public | v_schedules_2                  | view     | {admin=arwdxt/admin,viewuser=r/admin}
 public | v_systems                      | view     |
 public | vapp_backups                   | table    |
 public | vm_client                      | table    |
 public | vm_datastore                   | table    |
 public | vmentity_hle_map               | table    |
(148 rows)

1
Это не перечисляет таблицы в схемах, отличных от public .
Кенни Эвитт

10

Вы также можете использовать

select * from pg_tables where schemaname = 'information_schema'

В целом таблицы pg * позволяют вам видеть все в БД, не ограниченные вашими разрешениями (если, конечно, у вас есть доступ к таблицам).


9

Для частной схемы 'xxx'в postgresql:

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

Без table_type = 'BASE TABLE', вы будете перечислять таблицы и представления


8

1. получить все таблицы и представления из information_schema.tables, включая таблицы information_schema и pg_catalog.

select * from information_schema.tables

2. получить таблицы и представления принадлежат определенной схеме

select * from information_schema.tables
    where table_schema not in ('information_schema', 'pg_catalog')

3. получить только таблицы (почти \ dt)

select * from information_schema.tables
    where table_schema not in ('information_schema', 'pg_catalog') and
    table_type = 'BASE TABLE'

Если вы не фильтруете по table_type, вы получите все виды объектов, таких как таблицы и представления.
Расселхофф

Для чего именно where table_schema not in ('information_schema', 'pg_catalog')?
Джаярджо

@russellhoff Я сказал «получить все таблицы и представления» в шаге 2.
ХЖ

@jayarjo Я использовал "not in ('information_schema', 'pg_catalog')", чтобы получать только таблицы и представления USER.
хж

1

Если вы хотите быстрый и грязный однострочный запрос:

select * from information_schema.tables

Вы можете запустить его непосредственно в инструменте Query, не открывая psql.

(Другие публикации предлагают более конкретные запросы information_schema, но, как новенький, я обнаружил, что этот однострочный запрос помогает мне разобраться с таблицей)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.