2.0Kпросмотров
68.4%от подписчиков
17 ноября 2025 г.
Score: 2.2K
🔬 Системный каталог PostgreSQL (ч. 1). В Postgres собрано огромное количество данных в его собственных внутренних таблицах. Системный каталог Postgres — это то место, в котором Postgres ведёт учёт самого себя. Здесь Собранно куча полезной информации о СУБД и база данных, которая может пригодиться в разных ситуациях: от поиска проблем с производительностью, до выявления узких мест безопасности СУБД. Решили сделать для вас шпаргалку по самым востребованным представлениям и командам системного каталога PostgreSQL. Информации много, в одну заметку все не поместится, поэтому будет серия заметок. Начинаем! ☺️ Самый простой способ получить доступ к некоторым внутренним каталогам Postgres — использовать встроенные команды psql, которые обычно начинаются с \d. Вот самые распространённые из них: \d {имя_таблицы}: описывает конкретную таблицу; \di: список всех индексов; \dx: список установленных расширений; \dp: показать права доступа; \dp+: таблицы и представления с деталями о ролях и доступе; \dconfig: ваши текущие настройки конфигурации; \dt {имя_таблицы}: описать таблицу; \dti+: таблицы и индексы с размерами; \dg+: показать имена ролей; \df: показать ваши функции; \dv {имя_представления}: описать представление; \l: список всех ваших баз данных. Важные представления системного каталога Postgres. Postgres предоставляет множество сложных внутренних механизмов системы базы данных в виде удобных для запросов представлений. В них содержится масса информации о том, что происходит внутри вашей базы данных, и они дают прямой SQL-доступ для ответа на срочные вопросы, вроде «что съедает всю мою оперативку?», и более долгосрочные, например, «какие мои 10 самых медленных запросов?». pg_stat_activity Показывает текущую активность в базе данных, включая выполняемые запросы, их состояние и информацию о клиенте. Необходимо для диагностики проблем и получения идентификаторов процессов (pid) для "плохих" операций. Пример запроса, который показывает все запросы, которые чего-то ждут: SELECT pid, usename, datname, client_addr, application_name, state, query
FROM pg_stat_activity
WHERE state != 'idle'
ORDER BY state, query_start DESC; pg_stat_statements Для работы этого представления требуется расширение pg_stat_statements - но оно является частью contrib-библиотеки и поставляется с Postgres, поэтому не требует отдельной установки. Это представление отслеживает статистику выполнения всех запросов, выполняемых во всех базах данных. Оно невероятно полезно для выявления медленных или часто выполняемых запросов. 10 самых долгих запросов: SELECT query, calls, total_exec_time, mean_exec_time, rows
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10; pg_stat_database Это представление предоставляет статистику на уровне базы данных, такую как количество подключений, транзакций и операций ввода-вывода. Полезно для общего обзора активности и состояния базы данных. Общая статистика по БД для базы данных 'postgres': SELECT datname,numbackends, xact_commit, xact_rollback, blks_read, blks_hit
FROM pg_stat_database
WHERE datname = 'postgres'; pg_locks Это представление отображает информацию о блокировках, удерживаемых активными процессами. Это главный инструмент для устранения проблем с блокировками, взаимоблокировками (deadlocks) и конкуренцией внутри базы данных. Блокировки, объединённые с таблицей активности. Показывает невыданные блокировки (обычно те, которые не могут быть получены из-за других блокировок): SELECT a.datname, l.pid, l.locktype, l.relation::regclass, l.mode, l.granted
FROM pg_locks l
JOIN pg_stat_activity a ON l.pid = a.pid
WHERE NOT l.granted; На этом пока все! Продолжение в будущих заметках! До связи! #pgbase #queries