Список таблиць у схемі PostgreSQL


329

Коли я роблю \dtв psql, я отримую лише перелік таблиць у поточній схемі ( publicза замовчуванням).

Як я можу отримати список усіх таблиць у всіх схемах чи певній схемі?

Відповіді:


505

У всіх схемах:

=> \dt *.*

У конкретній схемі:

=> \dt public.*

Можна використовувати регулярні вирази з деякими обмеженнями

\dt (public|s).(s|t)
       List of relations
 Schema | Name | Type  | Owner 
--------+------+-------+-------
 public | s    | table | cpn
 public | t    | table | cpn
 s      | t    | table | cpn

Досвідчені користувачі можуть використовувати позначення регулярного виразу, такі як класи символів, наприклад [0-9], щоб відповідати будь-якій цифрі. Усі спеціальні символи регулярного вираження працюють, як зазначено в Розділі 9.7.3, за винятком випадків, .що приймаються як роздільник, як згадувалося вище, *який переводиться на нотацію регулярного виразу .*, ?яка перекладається ., і $яка відповідає буквально. Ви можете імітувати ці символи шаблону за потребою, написавши ?для ., (R+|)для R*чи (R|)для R?. $не потрібен як символ регулярного виразу, оскільки шаблон повинен відповідати всьому імені, на відміну від звичайної інтерпретації регулярних виразів (іншими словами,$автоматично додається до вашого шаблону). Напишіть *на початку та / або в кінці, якщо ви не хочете, щоб шаблон був прикріплений. Зауважте, що в рамках подвійних лапок всі спеціальні символи регулярного вираження втрачають своє особливе значення і узгоджуються буквально. Також спеціальні символи регулярного виразу узгоджуються буквально у шаблонах імен операторів (тобто аргументі \do).


6
Просто \dtце рівнозначно \dt public.*, я прав?
Заморожене полум'я

Як щодо, скажімо, двох конкретних таблиць у певній схемі? Як \dt public.user_info, public.user_scope?
Джеймс М. Лежав

Не зважаючи, простіше просто зробити \dt public.a; \dt public.b;на одній лінії.
Джеймс М. Лежав

це щось неявно. Якщо \ dt дає лише "загальнодоступні" таблиці, більше нічого не очікуєш через регулярні вирази ..
mehmet

1
@FrozenFlame Це не так! За замовчуванням він показує те, що є у вашому search_path, і що за замовчуванням "$user", public.*. Отже, set search_path=s; \dtзбирається перерахувати всі таблиці в схемі s.
Лукаш Юріх

257

Ви можете вибрати таблиці information_schema

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

6
дуже корисно, якщо ваш інтерфейс не підтримує ярлики. Дякую.
Метт Баннерт

1
Це також приємно, тому що ви можете зробити щось на зразок вибору table_schema, table_name з information_schema.tables, де ім'я table_назває "% незалежно від%"; якщо вам потрібно знати, в якій схемі знаходиться таблиця. Не впевнений, що ви можете зробити це за допомогою \ dt
Josh Brown

2
Дякую, він працює на Amazon Redshift і \ dt (прийнята відповідь) не робить.
Carlos2W

2
Це найзагальніша відповідь. information_schema визначена в стандартах SQL і доступна в більшості баз даних, які відповідають
Davos

54

Альтернативно information_schemaможна використовувати pg_tables:

select * from pg_tables where schemaname='public';

3
зауважте, що якщо ви хочете лише назвати таблицю, це результат, який є результатомSELECT tablename FROM pg_tables WHERE schemaname = 'public';
Грант Хамфріс

Знайдено проблему дозволів, що information_schemaне відображає елементи publicсхеми, але pg_tablesметод працює добре. Дуже дякую!
Джон Кроуфорд

8

Для тих, хто переживає це в майбутньому:

Якщо ви хочете переглянути список відносин для кількох схем:

$psql mydatabase
mydatabase=# SET search_path TO public, usa;   #schema examples
SET
mydatabase=# \dt
              List of relations
 Schema |      Name       | Type  |  Owner
--------+-----------------+-------+----------
 public | counties        | table | postgres
 public | spatial_ref_sys | table | postgres
 public | states          | table | postgres
 public | us_cities       | table | postgres
 usa    | census2010      | table | postgres
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.