Перерахуйте всі таблиці в postgresql information_schema


205

Який найкращий спосіб перерахувати всі таблиці в інформаційній схемі PostgreSQL?

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

Відповіді:


281

Ви можете просто запустити, select * from information_schema.tablesщоб отримати список кожної таблиці, якою керує Postgres для певної бази даних.

Ви також можете додати a, where table_schema = 'information_schema'щоб побачити лише таблиці в інформаційній схемі.


4
Дякую, я щойно спробував: / dt (зірочка). (Зірочка) це щось інше?
маленькийК

Я нічого не знаю про / dt (зірочку). (Зірочку), вибачте. Я тільки запустив запит на вибір у postgres, і він перелічив інформацію про всі таблиці в ньому. Спробуйте запустити оператор select (на порожньому db) і подивіться, що він повертає.
RodeoClown

Спробувавши вищевказану команду, перелічено наступні таблиці в information_schema: sql_features, sql_implementation_info, sql_languages, sql_packages, sql_parts, sql_sizing, sql_sizing_profiles ..... Отже, яка різниця між цими таблицями та тими, що знаходяться в information_schema.tables?
маленькийК

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

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

114

Для переліку таблиць використовуйте:

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

Він буде перераховувати лише створені вами таблиці.


Як щодо таблиць, які ви не створюєте, але у вас є дозвіл на доступ?
хуй

4
Це показуватиме лише таблиці в загальнодоступній схемі. Ви можете створювати таблиці в інших схемах.
Джо Ван Дайк

Також це не дозволить розрізняти таблиці та види.
jayarjo

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
Це не перераховує таблиці в інших схемах, ніж загальнодоступні .
Кенні Евітт

10

Ви також можете використовувати

select * from pg_tables where schemaname = 'information_schema'

Загалом таблиці pg * дозволяють бачити все в db, не обмежуючись вашими дозволами (якщо ви, звичайно, маєте доступ до таблиць).


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, включіть такі, як інформація_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'

Якщо ви не фільтруєте за таблицею_типу, ви отримаєте всі об'єкти, такі як таблиці та перегляди.
russellhoff

Для чого саме where table_schema not in ('information_schema', 'pg_catalog')?
jayarjo

1

Якщо ви хочете отримати швидкий і брудний запит на один вкладиш:

select * from information_schema.tables

Ви можете запустити його безпосередньо в інструменті "Запит" без необхідності відкривати psql.

(Інші публікації пропонують приємніші конкретніші інформаційні запити, але, як новачок, я знаходжу, що цей запит на одній лайнері допомагає мені зрозуміти таблицю)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.