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

205

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

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

littleK
источник

Ответы:

281

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

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

RodeoClown
источник
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'

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

phsaires
источник
Как насчет таблиц, которые вы не создаете, но у вас есть права доступа?
Хай
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 * позволяют вам видеть все в БД, не ограниченные вашими разрешениями (если, конечно, у вас есть доступ к таблицам).

Timofey
источник
9

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

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

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

germanlinux
источник
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'
HZH
источник
Если вы не фильтруете по 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, но, как новенький, я обнаружил, что этот однострочный запрос помогает мне разобраться с таблицей)

Салли Левеск
источник