Расширяемость
Эта страница переведена при помощи нейросети GigaChat.
Поддержка встраивания для расширений
Механизм JIT в PostgreSQL может встраивать тела функций типов C
и internal
, а также операторов, основанных на таких функциях. Чтобы сделать это встраивание для функций в расширениях, определения этих функций должны быть доступны. При использовании PGXS для сборки расширения для сервера, который был скомпилирован с поддержкой LLVM JIT, соответствующие файлы будут автоматически собраны и установлены.
Файлы должны быть установлены в $pkglibdir/bitcode/$extension/
, а их краткое изложение в $pkglibdir/bitcode/$extension.index.bc
, где $pkglibdir
– это каталог, возвращаемый pg_config --pkglibdir
, $extension
– базовое имя общей библиотеки расширения.
Для функций, встроенных в сам PostgreSQL, битовый код устанавливается в $pkglibdir/bitcode/postgres
.
Расширяемые JIT-провайдеры
PostgreSQL предоставляет реализацию JIT на основе LLVM. Интерфейс провайдера JIT является подключаемым, провайдер может быть изменен без перекомпиляции (хотя в настоящее время процесс сборки предоставляет данные поддержки встраивания только для LLVM). Активный провайдер выбирается с помощью настройки jit_provider.
Интерфейс провайдера JIT
Провайдер JIT загружается путем динамической загрузки библиотеки общего доступа с указанным именем. Для нахождения библиотеки используется обычный путь поиска библиотек. Чтобы предоставить необходимые обратные вызовы JIT-провайдера и указать, что библиотека фактически является JIT-провайдером, ей необходимо предоставить функцию на языке C с именем _PG_jit_provider_init
. Эта функция передается структуре, которую необходимо заполнить указателями функций обратного вызова для отдельных действий:
struct JitProviderCallbacks
{
JitProviderResetAfterErrorCB reset_after_error;
JitProviderReleaseContextCB release_context;
JitProviderCompileExprCB compile_expr;
};
extern void _PG_jit_provider_init(JitProviderCallbacks *cb);