
В PostgreSQL каждая база данных может содержать десятки и сотни таблиц, распределённых по схемам. Для понимания структуры базы важно быстро получить полный список таблиц, чтобы оценить их назначение, владельца и тип данных, которые они содержат.
Команда \dt в интерактивном режиме psql позволяет вывести таблицы текущей схемы, но для работы с несколькими схемами удобнее использовать SQL-запросы к системным каталогам pg_catalog и information_schema. Это обеспечивает гибкость при фильтрации по имени таблицы, схеме или владельцу.
Для крупных баз данных полезно строить выборку таблиц с конкретными критериями: пользовательские таблицы, таблицы с определёнными префиксами или таблицы, созданные в последние месяцы. Использование LIKE и условий WHERE сокращает время на поиск и упрощает анализ структуры данных.
Просмотр таблиц с указанием прав доступа позволяет оценить, какие пользователи имеют возможность изменять или просматривать данные. Для командной работы это помогает планировать распределение ролей и контролировать доступ к критичным таблицам.
PostgreSQL: как просмотреть список таблиц
Для получения полного списка таблиц всех схем используется SQL-запрос к information_schema.tables: SELECT table_schema, table_name FROM information_schema.tables WHERE table_type=’BASE TABLE’;. Это позволяет фильтровать таблицы по имени, схеме или владельцу, используя условия WHERE.
Системный каталог pg_catalog.pg_tables предоставляет альтернативный способ: SELECT schemaname, tablename, tableowner FROM pg_catalog.pg_tables;. Этот метод удобен для получения информации о правах доступа и владельцах без ограничения по типу таблицы.
Список таблиц в текущей базе командой \dt
- Schema – имя схемы, к которой принадлежит таблица;
- Name – название таблицы;
- Type – тип объекта (обычно TABLE для обычных таблиц);
- Owner – владелец таблицы.
Для работы с таблицами в конкретной схеме используйте шаблон:
Команда поддерживает фильтры по имени таблицы:
- \dt user% – таблицы, имена которых начинаются с «user»;
- \dt %log% – таблицы с «log» в любом месте имени.
Для быстрого анализа структуры таблиц можно использовать сочетание с \d имя_таблицы, чтобы получить список колонок, типы данных и ограничения.
Для отображения всех таблиц вместе с их схемами удобно использовать SQL-запросы к системным каталогам PostgreSQL. Это позволяет получить информацию о таблицах, находящихся не только в текущей схеме, но и во всех остальных.
Пример запроса через pg_catalog.pg_tables:
- SELECT schemaname, tablename, tableowner FROM pg_catalog.pg_tables ORDER BY schemaname, tablename;
Аналогичный вариант с использованием information_schema.tables:
- SELECT table_schema, table_name, table_type FROM information_schema.tables WHERE table_type=’BASE TABLE’ ORDER BY table_schema, table_name;
Рекомендации при работе с такими запросами:
- Фильтруйте по схеме с помощью WHERE table_schema=’public’, чтобы получить только нужный набор таблиц.
- Используйте LIKE для поиска таблиц с определённым префиксом, например table_name LIKE ‘user%’.
- Сортировка по схеме и имени таблицы ускоряет навигацию и упрощает обзор структуры базы.
Такой способ подходит для анализа больших баз данных и позволяет сразу видеть владельцев таблиц, что полезно для контроля доступа и планирования изменений.
Использование information_schema для поиска таблиц

Схема information_schema содержит метаданные всех объектов базы данных, включая таблицы. Для поиска таблиц применяется представление information_schema.tables, которое предоставляет имя таблицы, схему, тип объекта и другие свойства.
Пример запроса для всех таблиц базы данных:
- SELECT table_schema, table_name, table_type FROM information_schema.tables WHERE table_type=’BASE TABLE’ ORDER BY table_schema, table_name;
Фильтрация таблиц по схеме и имени позволяет быстро выделять нужные объекты:
- WHERE table_schema=’public’ – таблицы только из схемы public;
- AND table_name LIKE ‘user%’ – таблицы, имена которых начинаются с «user».
Использование information_schema удобно для построения скриптов и отчетов, так как запросы остаются совместимыми с различными версиями PostgreSQL и позволяют объединять данные о таблицах, их типах и схемах в единой выборке.
Фильтрация таблиц по имени через LIKE
Для поиска таблиц с определёнными шаблонами имен используется оператор LIKE в SQL-запросах к information_schema.tables или pg_catalog.pg_tables. Это позволяет быстро выделить нужные таблицы без просмотра всей базы.
Примеры запросов:
- SELECT table_schema, table_name FROM information_schema.tables WHERE table_name LIKE ‘user%’; – таблицы, имена которых начинаются с «user»;
- SELECT schemaname, tablename FROM pg_catalog.pg_tables WHERE tablename LIKE ‘%log%’; – таблицы, содержащие «log» в любом месте имени;
- SELECT table_schema, table_name FROM information_schema.tables WHERE table_name LIKE ‘%_archive’; – таблицы, имена которых заканчиваются на «_archive».
Рекомендации по применению:
- Используйте % для замены любого количества символов и _ для одного символа.
- Комбинируйте LIKE с фильтром по схеме, чтобы ограничить выборку только нужными таблицами.
- В больших базах запросы с LIKE ускоряются при наличии индекса на имя таблицы или при фильтрации сначала по схеме.
Просмотр только пользовательских таблиц

В PostgreSQL системные таблицы находятся в схемах pg_catalog и information_schema. Чтобы вывести только пользовательские таблицы, нужно исключить эти схемы при запросе.
Пример через information_schema.tables:
- SELECT table_schema, table_name FROM information_schema.tables WHERE table_type=’BASE TABLE’ AND table_schema NOT IN (‘pg_catalog’, ‘information_schema’) ORDER BY table_schema, table_name;
Пример через pg_catalog.pg_tables:
- SELECT schemaname, tablename FROM pg_catalog.pg_tables WHERE schemaname NOT IN (‘pg_catalog’, ‘information_schema’) ORDER BY schemaname, tablename;
Рекомендации:
- Используйте фильтр по схемам, чтобы исключить системные таблицы и сосредоточиться на данных приложения.
- При необходимости добавьте LIKE для поиска таблиц с определёнными именами.
- Сортировка по схеме и имени упрощает анализ структуры пользовательских таблиц.
Сортировка таблиц по дате создания или имени

PostgreSQL не хранит дату создания таблицы в information_schema, но можно использовать системный каталог pg_class совместно с pg_namespace для получения даты создания и сортировки.
Пример запроса для сортировки по имени:
| Схема | Имя таблицы |
|---|---|
| public | users |
| public | orders |
Пример сортировки по дате создания (для PostgreSQL 10+ с использованием obj_description для хранения комментариев с датой создания или сторонних триггеров):
| Схема | Имя таблицы | Дата создания |
|---|---|---|
| public | products | 2025-10-01 |
| sales | transactions | 2025-10-05 |
Рекомендации:
- Для сортировки по имени используйте ORDER BY tablename в запросах к information_schema.tables или pg_catalog.pg_tables.
- Для отслеживания даты создания создавайте комментарии или отдельную таблицу с метаданными при создании новых таблиц.
- Сортировка помогает быстро находить недавно добавленные таблицы или упорядочить таблицы по алфавиту для обзора структуры базы.
Получение списка таблиц через SQL-запрос к pg_catalog

Системный каталог pg_catalog содержит таблицы и представления, позволяя получать полную информацию о таблицах базы данных, включая владельца и схему. Основное представление для таблиц – pg_tables.
Пример запроса для получения всех таблиц:
- SELECT schemaname, tablename, tableowner FROM pg_catalog.pg_tables ORDER BY schemaname, tablename;
- SELECT schemaname, tablename, tableowner FROM pg_catalog.pg_tables WHERE schemaname NOT IN (‘pg_catalog’, ‘information_schema’) ORDER BY schemaname, tablename;
Дополнительные рекомендации:
- Используйте фильтрацию по schemaname для быстрого поиска таблиц нужной схемы.
- Применяйте LIKE для поиска таблиц по шаблону имени, например tablename LIKE ‘log%’.
- Сортировка по схеме и имени таблицы упрощает анализ структуры базы данных и выявление дублирующихся таблиц.
Просмотр таблиц с указанием владельца и прав доступа
Для анализа прав доступа и владельцев таблиц в PostgreSQL используется системный каталог pg_tables вместе с командой \z в psql. Это позволяет контролировать, кто может просматривать и изменять данные.
Пример запроса для получения таблиц с владельцем:
- SELECT schemaname, tablename, tableowner FROM pg_catalog.pg_tables WHERE schemaname NOT IN (‘pg_catalog’, ‘information_schema’) ORDER BY schemaname, tablename;
Для просмотра прав доступа применяют команду:
- \z *.* – отображает права всех таблиц во всех схемах.
Рекомендации:
- Сортируйте таблицы по владельцу, чтобы быстро выявлять ответственность за данные.
- Регулярно проверяйте привилегии, чтобы исключить лишний доступ к критичным таблицам.
- Для автоматизации анализа прав можно объединять данные из pg_tables и pg_roles через SQL-запросы.
Вопрос-ответ:
Как получить список всех таблиц в PostgreSQL, включая системные и пользовательские?
Чтобы вывести полный список таблиц, включая системные и пользовательские, можно использовать SQL-запрос к pg_catalog.pg_tables или information_schema.tables. Например, запрос SELECT schemaname, tablename, tableowner FROM pg_catalog.pg_tables ORDER BY schemaname, tablename; покажет все таблицы с указанием схемы и владельца. Если нужно исключить системные таблицы, добавьте условие WHERE schemaname NOT IN (‘pg_catalog’, ‘information_schema’).
Можно ли отобразить только таблицы определённой схемы?
Да. При использовании команды \dt в psql достаточно указать схему, например \dt public.*, чтобы увидеть все таблицы схемы public. При запросах через SQL к information_schema.tables можно добавить условие WHERE table_schema=’public’, что даст список только таблиц указанной схемы с дополнительными сведениями, такими как тип таблицы.
Как фильтровать таблицы по части имени?
Для поиска таблиц с определёнными именами используется оператор LIKE. Пример: SELECT table_schema, table_name FROM information_schema.tables WHERE table_name LIKE ‘user%’; — это выведет все таблицы, имена которых начинаются с «user». Аналогично можно искать по любой части имени, используя % как подстановочный символ. Для больших баз данных рекомендуется также фильтровать по схеме, чтобы уменьшить объём выборки.
Как узнать владельца таблицы и права доступа на неё?
Владелец таблицы отображается в pg_tables в колонке tableowner. Чтобы увидеть права доступа, используйте команду \z имя_таблицы в psql. Она показывает, какие роли имеют право на SELECT, INSERT, UPDATE и другие операции. Для всех таблиц сразу можно применить \z *.*. Эти данные помогают отслеживать распределение прав и контроль над данными.
Можно ли сортировать таблицы по дате создания?
PostgreSQL не хранит дату создания таблиц в стандартных представлениях information_schema. Для отслеживания даты можно использовать системный каталог pg_class совместно с пользовательскими комментариями или метаданными, где фиксируется дата создания. Для сортировки по имени достаточно использовать ORDER BY tablename в запросе к pg_catalog.pg_tables или information_schema.tables. При планировании контроля за новыми таблицами часто создают отдельную таблицу метаданных для отслеживания даты создания.
Как быстро получить список всех пользовательских таблиц в базе данных PostgreSQL?
Для отображения только пользовательских таблиц используется системный каталог pg_tables с фильтром по схемам. Например, запрос SELECT schemaname, tablename, tableowner FROM pg_catalog.pg_tables WHERE schemaname NOT IN (‘pg_catalog’, ‘information_schema’) ORDER BY schemaname, tablename; вернёт таблицы, созданные пользователями, без системных объектов. Такой способ позволяет увидеть владельцев таблиц и их расположение по схемам.
Можно ли отфильтровать таблицы по части имени или определённому префиксу?
Да, это делается с помощью оператора LIKE в запросах к information_schema.tables или pg_catalog.pg_tables. Например, SELECT table_schema, table_name FROM information_schema.tables WHERE table_name LIKE ‘log_%’; выведет все таблицы, имена которых начинаются с «log_». Можно использовать символы подстановки % для поиска по любой части имени и комбинировать с фильтром по схеме, чтобы ограничить выборку конкретными объектами.
