Как выполнить 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 (например, наличие триггеров или правил).
