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

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

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

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

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

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

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

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy