Системный каталог
Системный каталог - это набор системных таблиц и представлений, которые хранят метаданные о всех объектах базы данных. Это "мозг" PostgreSQL, содержащий информацию о:
-
Структуре базы данных
-
Правах доступа
-
Настройках сервера
-
Состоянии системы
Системные таблицы (pg_catalog)
Таблица | Описание |
---|---|
pg_class |
Хранит информацию о таблицах, индексах, последовательностях |
pg_attribute |
Содержит данные о столбцах таблиц |
pg_index |
Информация об индексах |
pg_database |
Список всех баз данных |
pg_user /pg_roles |
Данные о пользователях и ролях |
pg_tablespace |
Информация о табличных пространствах |
Системные представления
Представление | Описание |
---|---|
pg_tables |
Список всех таблиц |
pg_views |
Список всех представлений |
pg_indexes |
Информация об индексах |
pg_stat_activity |
Активные подключения |
Практическое использование системного каталога
- рекомендуется выполнить представленные ниже примеры, что-бы посмотреть на результат
Получить список всех таблиц:'your_table'
- название любой вашей таблицы.
Найти все индексы таблицы:
Администрирование через системный каталог
Поиск "мусорных" объектов:
-
pg_class - системная таблица, содержащая:
-
Все таблицы
-
Индексы
-
Последовательности
-
Представления
-
Составные типы
-
-
pg_namespace - системная таблица со списком всех схем
-
pg_roles - системная таблица с информацией о пользователях/ролях
-
Фильтры:
-
rolname NOT IN ('postgres', 'rdsadmin')
- исключает объекты, принадлежащие системным пользователям -
n.nspname NOT IN ('pg_catalog', 'information_schema')
- исключает объекты в системных схемах
-
Результат показывает:
-
Имя схемы (nspname)
-
Имя объекта (relname)
Типы объектов, которые могут быть найдены:
-
Пользовательские таблицы
-
Индексы
-
Последовательности
-
Представления
-
Составные типы
Дополнительные рекомендации
Для более точного анализа можно добавить:-
Проверьте их использование (последнее время доступа)
-
Убедитесь в отсутствии зависимостей
-
Сделайте резервную копию
Для автоматизации можно создать представление:
Этот запрос особенно полезен при:
-
Очистке базы данных после тестирования
-
Анализе унаследованных баз данных
-
Поиске потенциально неиспользуемых объектов
Анализ прав доступа:
Данный SQL-запрос позволяет проанализировать права доступа к таблицам в базе данных.
Разберем его работу подробно:
Запрос помогает администратору:
-
Просмотреть все выданные привилегии на таблицы
-
Контролировать права доступа пользователей
-
Выявлять потенциальные проблемы с безопасностью
-
Аудитировать систему разрешений
Ключевые компоненты
-
information_schema.role_table_grants - стандартное представление, содержащее:
-
Все выданные привилегии на таблицы
-
Информацию о том, кто и какие права имеет
-
-
Основные столбцы в результате:
-
grantee
- имя пользователя или роли, которой выданы права -
privilege_type
- тип привилегии:-
SELECT - чтение данных
-
INSERT - вставка новых строк
-
UPDATE - изменение данных
-
DELETE - удаление данных
-
TRUNCATE - очистка таблицы
-
REFERENCES - создание внешних ключей
-
TRIGGER - создание триггеров
-
-
table_name
- имя таблицы -
table_schema
- схема, в которой находится таблица (можно добавить в SELECT)
-
Дополненная версия запроса
Для более детального анализа рекомендуется использовать:
-
Группировка прав:
-
Запрос группирует одинаковые комбинации (пользователь+таблица)
-
Объединяет привилегии через запятую
-
-
Дополнительные фильтры:
-
Исключение системных схем
-
Сортировка по схеме и таблице
-
-
Полезные модификации:
-- Права конкретного пользователя WHERE grantee = 'username' -- Права на конкретную таблицу WHERE table_name = 'your_table' -- Права с возможностью передачи (WITH GRANT OPTION) WHERE is_grantable = 'YES'
-
Аудит безопасности:
-
Проверка, не имеют ли пользователи избыточных прав
-
Выявление таблиц с публичным доступом
-
-
Миграция прав:
-
Документирование текущей системы разрешений
-
Перенос прав между серверами
-
-
Устранение проблем:
-
Анализ причин "Permission denied"
-
Поиск утерянных прав доступа
-
Важные замечания
-
Для полного анализа прав нужно также проверять:
-
Права на схемы (
information_schema.role_usage_grants
) -
Права на базы данных (
pg_database
) -
Членство в ролях (
pg_roles
)
-
-
Изменять права следует через стандартные команды:
GRANT SELECT ON TABLE mytable TO username; REVOKE INSERT ON TABLE mytable FROM username;
Этот запрос особенно полезен при:
-
Проведении аудита безопасности
-
Подготовке к миграции
-
Анализе проблем с доступом
-
Оптимизации системы разрешений
Информационные схемы (information_schema)
Альтернативный, стандартизированный способ доступа к метаданным:
-
Более переносим между разными СУБД
-
Менее детализирован, чем pg_catalog
-
Пример использования:
Практические задания
Цель: Научиться извлекать информацию о таблицах и их структуре
Подготовка данных:
Задания:
-
Найти все таблицы в схеме
hr
и их владельцев -
Получить список всех столбцов таблицы
employees
с типами данных -
Определить, какие индексы существуют для таблицы
employees
-
Найти все внешние ключи в схеме
hr
Цель: Научиться анализировать активные подключения и запросы
Подготовка данных:
-
Откройте 3 разных сеанса psql
-
В каждом выполните разные операции:
-
Сеанс 1:
SELECT * FROM hr.employees;
-
Сеанс 2:
BEGIN; UPDATE hr.employees SET salary = salary * 1.1;
(не завершайте транзакцию) -
Сеанс 3:
CREATE TEMP TABLE temp_data (id INT);
-
Задания:
-
Просмотреть список всех активных подключений
-
Определить, какие запросы выполняются дольше всего
-
Найти заблокированные транзакции
-
Определить временные таблицы в текущей сессии
Цель: Научиться анализировать и изменять права доступа
Подготовка данных:
Задания:
-
Просмотреть все права доступа для роли
manager
-
Найти все таблицы, к которым имеет доступ роль
analyst
-
Определить, какие пользователи могут создавать объекты в схеме
hr
-
Проверить, есть ли у кого-то права с опцией
GRANT OPTION
Цель: Научиться выявлять потенциальные проблемы
Подготовка данных:
Задания:
-
Найти таблицы без первичных ключей
-
Обнаружить индексы, которые никогда не используются
-
Выявить "висячие" объекты (например, после DROP TABLE)
-
Найти таблицы без индексов
Цель: Научиться использовать системный каталог для тюнинга
Подготовка данных:
Задания:
-
Определить размер таблицы
hr.employees
-
Найти самые большие таблицы в базе данных
-
Проанализировать статистику по использованию индексов
-
Проверить, есть ли в таблицах "мертвые" строки, требующие VACUUM