Как выполнить SQL-запрос для поиска всех таблиц в базе данных PostgreSQL через системный каталог pg_tables?

Системный каталог pg_tables в PostgreSQL — это специальное представление (view), которое предоставляет удобный доступ к информации о всех таблицах в базе данных. Оно является надстройкой над низкоуровневыми системными таблицами pg_class и pg_namespace.

## Базовый запрос для получения всех таблиц

Самый простой способ получить список всех таблиц:

sql
SELECT * FROM pg_tables;

Этот запрос вернёт все таблицы во всех схемах, включая системные. Столбцы результата:
— **schemaname** — имя схемы
— **tablename** — имя таблицы
— **tableowner** — владелец таблицы
— **tablespace** — табличное пространство
— **hasindexes** — наличие индексов
— **hasrules** — наличие правил
— **hastriggers** — наличие триггеров
— **rowsecurity** — включена ли защита на уровне строк

## Фильтрация только пользовательских таблиц

Системные схемы (pg_catalog, information_schema) обычно не нужны. Чтобы получить только пользовательские таблицы:

sql
SELECT schemaname, tablename, tableowner
FROM pg_tables
WHERE schemaname NOT IN (‘pg_catalog’, ‘information_schema’)
ORDER BY schemaname, tablename;

## Поиск таблиц в конкретной схеме

Если нужны таблицы только из схемы public:

sql
SELECT tablename
FROM pg_tables
WHERE schemaname = ‘public’
ORDER BY tablename;

## Поиск таблиц по имени (частичное совпадение)

Для поиска таблиц, имя которых содержит определённую подстроку:

sql
SELECT schemaname, tablename
FROM pg_tables
WHERE tablename LIKE ‘%user%’
AND schemaname = ‘public’;

## Поиск таблиц конкретного владельца

sql
SELECT schemaname, tablename
FROM pg_tables
WHERE tableowner = ‘myuser’;

## Альтернатива через information_schema

Помимо pg_tables, можно использовать стандартный SQL-совместимый способ:

sql
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;

## Быстрая команда в psql

Если вы работаете в консольном клиенте psql, можно использовать мета-команду:

dt public.*

Эта команда выведет все таблицы схемы public без написания SQL-запроса.

## Подсчёт количества таблиц

sql
SELECT COUNT(*)
FROM pg_tables
WHERE schemaname = ‘public’;

Использование pg_tables — наиболее прямой и производительный способ получить метаданные о таблицах в PostgreSQL, особенно когда нужна информация, специфичная для PostgreSQL (например, наличие триггеров или правил).


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.