Организация данных
Системный каталог
13
Авторские права
© Postgres Professional, 2015‒2022
Авторы: Егор Рогов, Павел Лузанов, Илья Баштанов
Использование материалов курса
Некоммерческое использование материалов курса (презентации,
демонстрации) разрешается без ограничений. Коммерческое
использование возможно только с письменного разрешения компании
Postgres Professional. Запрещается внесение изменений в материалы
курса.
Обратная связь
Отзывы, замечания и предложения направляйте по адресу:
Отказ от ответственности
Компания Postgres Professional не несет никакой ответственности за
любые повреждения и убытки, включая потерю дохода, нанесенные
прямым или непрямым, специальным или случайным использованием
материалов курса. Компания Postgres Professional не предоставляет
каких-либо гарантий на материалы курса. Материалы курса
предоставляются на основе принципа «как есть» и компания Postgres
Professional не обязана предоставлять сопровождение, поддержку,
обновления, расширения и изменения.
2
Темы
Что такое системный каталог и как к нему обращаться
Объекты системного каталога и их расположение
Правила именования объектов
Специальные типы данных
3
Системный каталог
Набор таблиц и представлений,
описывающих все объекты кластера баз данных
Схемы
основная схема: pg_catalog
альтернативное представление: information_schema (стандарт SQL)
SQL-доступ
просмотр: SELECT
изменение: CREATE, ALTER, DROP
Доступ в psql
специальные команды для удобства просмотра
Системный каталог представляет собой набор таблиц и представлений
с описанием всех объектов СУБД, «метаинформация» о содержимом
Для доступа к этой информации используется обычные запросы 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_».
Названия столбцов имеют трехбуквенный префикс, который, как
правило, соответствует имени таблицы. После префикса нет знака
подчеркивания.
Названия объектов хранятся в нижнем регистре.
Пример запроса для табличных пространств:
SELECT * FROM pg_tablespace WHERE spcname='pg_global';
Все столбцы pg_tablespace начинаются с «spc», а название табличного
пространства в условии WHERE нужно указывать в нижнем регистре.
7
Специальные типы данных
OID — идентификатор объекта
столбец, обеспечивает уникальность в таблицах системного каталога
целочисленный тип данных с автоинкрементом
Reg-типы
псевдонимы oid для некоторых таблиц системного каталога
(regclass для pg_class и т. п.)
приведение текстового имени объекта к типу oid и обратно
Большинство таблиц системного каталога используют в качестве
идентификатора столбец с именем oid и одноименным типом данных.
Ограничение PRIMARY KEY для таблиц системного каталога не
используется (оно добавлено в 14-й версии), но на столбцах oid
созданы уникальные индексы.
Столбцы oid до 12-й версии являлись скрытыми и обычная команда
«SELECT *» их не показывала.
Тип 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