Перейти к основному содержимому

Объявления системного каталога и его начальное содержимое

примечание

Эта страница переведена нейросетью GigaChat.

PostgreSQL использует множество различных системных каталогов для отслеживания существования и свойств объектов баз данных, таких как таблицы и функции. Физически нет никакой разницы между системным каталогом и обычной таблицей пользователя, но код C бэкенда знает структуру и свойства каждого каталога и может манипулировать им напрямую на низком уровне. Таким образом, например, не рекомендуется пытаться изменить структуру каталога на лету; это нарушит предположения, заложенные в коде C о том, как строки каталога расположены. Но структура каталогов может изменяться от одной основной версии к другой.

Структуры каталогов объявлены в специально оформленных заголовочных файлах C в каталоге src/include/catalog/ дерева исходников. Для каждого каталога есть заголовочный файл с именем каталога (например, pg_class.h для pg_class), который определяет набор столбцов, которые имеет каталог, а также некоторые другие основные свойства, такие как его идентификатор объекта.

Многие из каталогов содержат исходные данные, которые должны быть загружены в них во время фазы «загрузки» команды initdb, чтобы привести систему к состоянию, при котором она способна выполнять команды SQL. (Например, pg_class.h должен содержать запись для самого себя, а также одну для каждого другого системного каталога и индекса.) Эти исходные данные хранятся в редактируемом виде в файлах данных, которые также находятся в каталоге src/include/catalog/. Например, pg_proc.dat описывает все начальные строки, которые должны быть вставлены в каталог pg_proc.

Для создания файлов каталога и загрузки этих начальных данных в них, бэкенд, работающий в режиме начальной загрузки, считывает файл BKI (интерфейс бэкенда), содержащий команды и первоначальные данные. Файл postgres.bki, используемый в этом режиме, создается из вышеуказанных заголовочных и файловых данных при создании дистрибутива PostgreSQL с помощью скрипта Perl под названием genbki.pl. Хотя он специфичен для конкретной версии PostgreSQL, postgres.bki является независимым от платформы и устанавливается в подкаталоге share дерева установки.

genbki.pl также создает производный заголовочный файл для каждого каталога, например pg_class_d.h для каталога pg_class. Этот файл содержит автоматически сгенерированные определения макросов и может содержать другие макросы, объявления перечислений и т.д., которые могут быть полезны для клиентского кода на языке C, который читает конкретный каталог.

Большинство разработчиков PostgreSQL не нуждаются в непосредственном взаимодействии с файлом BKI, но почти любое нетривиальное добавление функций в бэкенде потребует изменения заголовков каталога и/или файлов с начальными данными. Остальная часть этой главы предоставляет некоторую информацию об этом, а для полноты описывает формат файла BKI.