2013-03-26 4 views
201

Когда я делаю \dt в psql, я получаю только список таблиц в текущей схеме (по умолчанию public).Таблицы списков в схеме PostgreSQL

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

ответ

304

Во всех схемах:

=> \dt *.* 

В определенной схеме:

=> \dt public.* 

можно использовать regular expressions with some restrictions

\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 |) для R3. $ не требуется в качестве символа регулярного выражения, поскольку шаблон должен соответствовать всему имени, в отличие от обычной интерпретации регулярных выражений (другими словами, $ автоматически добавляется к вашему шаблону). Напишите * в начале и/или конце, если вы не хотите, чтобы шаблон был привязан. Обратите внимание, что в двойных кавычках все специальные символы регулярного выражения теряют свои особые значения и соответствуют буквально. Кроме того, специальные символы регулярного выражения сопоставляются буквально в шаблонах имен операторов (т. Е. Аргумент \ do).

+1

Просто '\ dt' эквивалентен' \ dt public. * ', правильно? –

+0

Как, скажем, две конкретные таблицы в конкретной схеме? Как '\ dt public.user_info, public.user_scope'? –

+0

Nevermind, проще просто сделать '\ dt public.a; \ dt public.b; 'в одной строке. –

145

Вы можете выбрать таблицы из information_schema

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

очень полезно, если ваш интерфейс не поддерживает ярлыки. Благодарю. –

+1

Это тоже приятно, потому что вы можете сделать что-то вроде выберите table_schema, table_name из information_schema.tables, где table_name нравится '% whatever%'; Если вам нужно знать, в какой схеме находится таблица. Не уверен, что вы можете сделать это с помощью \ dt –

+1

Спасибо, он работает на Amazon Redshift и \ dt (принятый ответ). – Carlos2W

23

В качестве альтернативы information_schema можно использовать pg_tables:

select * from pg_tables where schemaname='public'; 
+0

Обратите внимание, что если вы хотите, чтобы имя таблицы было результирующим, то это 'SELECT tablename FROM pg_tables WHERE schemaname = 'public';' –

+0

Обнаружена проблема с правами доступа, в которой 'information_schema' не перечисляет элементы из' public', но метод 'pg_tables' работал хорошо. Большое спасибо! –

0

Для тех, кто прибывает через это в будущем:

Если вы хотели бы видеть список отношений для нескольких схем:

$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 

 Смежные вопросы

  • Нет связанных вопросов^_^