Объявления системного каталога и его начальное содержимое
Эта страница переведена нейросетью 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.