Список таблиц в схеме PostgreSQL

178

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

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

Теги:
postgresql-9.1
psql

3 ответа

285
Лучший ответ

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

=> \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).

  • 4
    Просто \dt эквивалентно \dt public.* , Я прав?
  • 0
    Как насчет, скажем, двух конкретных таблиц в конкретной схеме? Как \dt public.user_info, public.user_scope ?
Показать ещё 2 комментария
127

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

SELECT * FROM information_schema.tables 
WHERE table_schema = 'public'
  • 4
    очень полезно, если ваш интерфейс не поддерживает ярлыки. Благодарю.
  • 1
    Это также хорошо, потому что вы можете сделать что-то вроде select table_schema, table_name из information_schema.tables, где table_name наподобие '% what%'; если вам нужно знать, в какой схеме находится таблица. Не уверен, что вы можете сделать это с помощью \ dt
Показать ещё 2 комментария
18

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

select * from pg_tables where schemaname='public';
  • 3
    обратите внимание, что если вы хотите, чтобы имя таблицы SELECT tablename FROM pg_tables WHERE schemaname = 'public'; результирующим запросом, это SELECT tablename FROM pg_tables WHERE schemaname = 'public'; имя таблицы SELECT tablename FROM pg_tables WHERE schemaname = 'public';
  • 0
    Обнаружена проблема с правами доступа, когда information_schema не перечисляет элементы из public схемы, но метод pg_tables работал хорошо. Большое спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню