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

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

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

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

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

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

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

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

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