Организация данных
Системный каталог
16
Авторские права
© Postgres Professional, 2017–2024
Авторы: Егор Рогов, Павел Лузанов, Илья Баштанов, Алексей Береснев
Фото: Олег Бартунов (монастырь Пху и пик Бхрикути, Непал)
Использование материалов курса
Некоммерческое использование материалов курса (презентации,
демонстрации) разрешается без ограничений. Коммерческое
использование возможно только с письменного разрешения компании
Postgres Professional. Запрещается внесение изменений в материалы
курса.
Обратная связь
Отзывы, замечания и предложения направляйте по адресу:
edu@postgrespro.ru
Отказ от ответственности
Компания Postgres Professional не несет никакой ответственности за
любые повреждения и убытки, включая потерю дохода, нанесенные
прямым или непрямым, специальным или случайным использованием
материалов курса. Компания Postgres Professional не предоставляет
каких-либо гарантий на материалы курса. Материалы курса
предоставляются на основе принципа «как есть» и компания Postgres
Professional не обязана предоставлять сопровождение, поддержку,
обновления, расширения и изменения.
2
Темы
Что такое системный каталог и как к нему обращаться
Объекты системного каталога и их расположение
Правила именования объектов
Специальные типы данных
3
Системный каталог
Набор таблиц и представлений,
описывающих все объекты кластера баз данных
Схемы
основная схема: pg_catalog
альтернативное представление: information_schema (стандарт SQL)
SQL-доступ
просмотр: SELECT
изменение: CREATE, ALTER, DROP
Доступ в psql
специальные команды для удобства просмотра
Системный каталог представляет собой набор таблиц и представлений
с описанием всех объектов СУБД, «метаинформация» о содержимом
кластера: https://postgrespro.ru/docs/postgresql/16/catalogs. Начиная с
14-й версии PostgreSQL для большинства таблиц системного каталога
добавлены первичные ключи и ограничения уникальности.
Для доступа к этой информации используются обычные запросы SQL.
При помощи команд SELECT можно получить описание любых
объектов, а при помощи команд DDL (Data Definition Language) можно
добавлять и изменять объекты.
Все таблицы и представления системного каталога располагаются
в схеме pg_catalog. Существует и другая схема, предписанная
стандартом SQL: information_schema. Она более стабильна и
переносима, чем pg_catalog, но не отражает специфику PostgreSQL.
Клиентские программы могут читать содержимое системного каталога
и показывать его пользователю в удобном виде. Например,
графические среды разработки и управления обычно изображают
иерархический «навигатор» объектов.
Программа psql тоже предлагает ряд удобных встроенных команд для
работы с системным каталогом. Как правило, эти команды начинаются
на \d (от describe). Подробности об этих командах в документации:
Наиболее часто используемые из них мы посмотрим в демонстрации.
В материалах курса есть файл catalogs.pdf со схемой основных таблиц
системного каталога и команд psql для работы с ними.
4
Общие объекты кластера
appdb
pg_catalog
таблица
таблица
объект
public
таблица
таблица
объект
postgres
pg_catalog public
таблица
таблица
объект
таблица
таблица
объект
таблица
таблица
объект
таблица
таблица
объект
таблица
таблица
объект
таблица
таблица
объект
таблица
таблица
объект
объекты
данной БД
общие
объекты
кластера
схема
таблица
таблица
объект
таблица
таблица
объект
В каждой базе данных кластера создается свой набор таблиц
системного каталога. Однако существует несколько объектов каталога,
которые являются общими для всего кластера. Наиболее очевидный
пример — список самих баз данных.
Эти таблицы хранятся вне какой-либо базы данных, но при этом
одинаково видны из каждой БД.
5
Правила именования
Префиксы имен объектов (таблиц, представлений)
и столбцов
Названия объектов всегда хранятся в нижнем регистре
pg_database.datname
общий префикс
всех объектов
префикс столбцов
(обычно повторяет
имя объекта)
Все таблицы и представления системного каталога начинаются
с префикса «pg_». Для предотвращения потенциальных конфликтов,
не рекомендуется создавать собственные объекты, начинающиеся
с «pg_».
Названия столбцов имеют трехбуквенный префикс, который, как
правило, соответствует имени таблицы. После префикса нет знака
подчеркивания. Имеются некоторые исключения из этого правила,
например, столбец oid и другие.
Названия объектов хранятся в нижнем регистре.
7
Специальные типы данных
Тип oid — идентификатор объекта
столбец oid обеспечивает уникальность в таблицах системного каталога
целочисленный тип данных с автоинкрементом
Типы reg*
псевдонимы oid для некоторых таблиц системного каталога
(regclass для pg_class и т. п.)
приведение текстового имени объекта к типу oid и обратно
Большинство таблиц системного каталога используют в качестве
первичного ключа столбец с именем oid и одноименным типом данных.
Тип oid (object identifier) представляет собой целочисленный тип данных
с разрядностью 32 бита (около 4 млрд. значений) и автоинкрементом.
Существует несколько специальных типов данных (фактически
псевдонимов oid), начинающихся на «reg», которые позволяют
преобразовывать имена объектов в oid и обратно.
9
Итоги
Системный каталог — метаинформация о кластере
в самом кластере
SQL-доступ и дополнительные команды psql
Часть таблиц системного каталога хранится в базах данных,
часть — общая для всего кластера
Системный каталог использует специальные типы данных
10
Практика
1. Получите описание таблицы pg_class.
2. Получите подробное описание представления pg_tables.
3. Создайте базу данных и временную таблицу в ней.
Получите полный список схем в базе, включая системные.
4. Получите список представлений в схеме information_schema.
5. Какие запросы выполняет следующая команда psql?
\d+ pg_views