Глава 73. Объявления и начальное содержимое системного каталога#
Глава 73. Объявления и начальное содержимое системного каталога
Оглавление
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.