2.2Kпросмотров
76.9%от подписчиков
21 ноября 2025 г.
Score: 2.5K
🔬 Системный каталог PostgreSQL (ч. 3). Всем привет! Продолжаем разбираться с системным каталогом PostgreSQL. Это будет заключительная заметка из этой серии. Фактически, те метакоманды psql, которые мы изучали в первой заметке из этой серии соответствуют конкретным таблицам системного каталога. Вот их примерное соответствие: &#092;d (таблицы и объекты) - pg_class &#092;di (индексы) - pg_class, pg_index &#092;dx (установленные расширения) - pg_extension &#092;dp (таблицы и привилегии) - pg_class, pg_roles, pg_attribute &#092;l (базы данных) - pg_database &#092;df (доступные функции) - pg_proc Давайте рассмотрим эти таблицы подробнее и посмотрим как их можно использовать. pg_stats Таблица pg_stats собирает всю статистику о ваших столбцах - такие вещи как кардинальность - много ли элементов в этом столбце или мало? Postgres использует много информации из pg_stats для принятия решений планировщиком запросов. В некоторых случаях предоставление pg_stats дополнительной информации может ускорить ваши запросы. Этот запрос покажет информацию по столбцам конкретной таблицы: SELECT FROM pg_stats WHERE tablename = 'имя_таблицы' AND attname = 'имя_столбца'; pg_class pg_class содержит строку для каждой таблицы, индекса, последовательности, представления, материализованного представления и других объектов в базе данных. SELECT c.relname, pg_get_userbyid(c.relowner) AS owner FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = 'public' AND c.relkind = 'r' ORDER BY c.relname; pg_type Эта таблица хранит все существующие типы данных. В Postgres каждая таблица имеет связанный составной тип, который определяет структуру ее строк. Так что если вы сделаете SELECT , вы увидите здесь все имена таблиц и все типы данных. Если немного отфильтровать, вы можете увидеть все свои пользовательские типы данных, домены и перечисления. Этот запрос покажет пользовательские типы данных в Postgres: SELECT t.typname AS type_name, n.nspname AS schema_name, t.typtype AS type_class FROM pg_type AS t JOIN pg_namespace AS n ON t.typnamespace = n.oid LEFT JOIN pg_class c ON typrelid = c.oid WHERE t.typtype IN ('e', 'd', 'c') AND n.nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast') AND (t.typtype <> 'c' OR c.relkind = 'c') ORDER BY schema_name, type_name; pg_proc Это каталог всех функций и хранимых процедур, которые может использовать Postgres. Создали функцию на прошлой неделе, но не можете найти сейчас? Просто просмотрите их все. Этот запрос находит все функции, триггеры и хранимые процедуры; SELECT proname AS function_name, proargnames AS argument_names, pg_catalog.format_type(prorettype, NULL) AS return_type FROM pg_proc ORDER BY proname; pg_attribute Эта таблица хранит информацию о столбцах таблиц. pg_attribute покажет одна строку для каждого столбца в каждой таблице. Запрос столбцов и типов данных для любой таблицы: SELECT a.attname AS column_name, pg_catalog.format_type(a.atttypid, a.atttypmod) AS data_type FROM pg_catalog.pg_attribute a WHERE a.attrelid = 'orders'::regclass AND a.attnum > 0 AND NOT a.attisdropped ORDER BY a.attnum; Схема pg_catalog pg_catalog- это схема, содержащая системные таблицы. Иногда навигация по этим таблицам и представлениям может быть запутанной и требовать просмотра смеси документации и исходного кода. Если вы хотите исследовать, как каталог связан, вы можете подключиться к своей базе данных с аргументом -E для psql (или выполнить &#092;set ECHO_HIDDEN on, если вы уже подключены). Postgres будет показывать SQL-команду, которая выполняется для каждой метакоманды psql. Очень полезно для образовательных целей и понимания внутреннего устройства PostgreSQL. На этом все! До связи! #pgbase #queries
2.2K
просмотров
3889
символов
Нет
эмодзи
Нет
медиа

Другие посты @pg_guru

Все посты канала →
🔬 Системный каталог PostgreSQL (ч. 3). Всем привет! Продолж — @pg_guru | PostSniper