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

Содержание

68.1. Правила объявления системных каталогов
68.2. Исходные данные системных каталогов
68.2.1. Формат файла данных
68.2.2. Назначение OID
68.2.3. Поиск по OID
68.2.4. Рецепты по редактированию файлов данных
68.3. Формат файла BKI
68.4. Команды BKI
68.5. Структура файла BKI
68.6. Пример BKI

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

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

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

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

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

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