On this page
32.4. Extensibility
32 .4.1. 内联扩展支持
PostgreSQL 的 JIT 实现可以内联C
和internal
类型的函数体,以及基于此类函数的运算符。为此,对于扩展中的功能,需要使这些功能的定义可用。当使用PGXS对已使用 LLVM JIT 支持编译的服务器构建扩展时,将自动构建并安装相关文件。
必须将相关文件安装到$pkglibdir/bitcode/$extension/
并将它们的摘要安装到$pkglibdir/bitcode/$extension.index.bc
,其中$pkglibdir
是pg_config --pkglibdir
返回的目录,而$extension
是扩展的共享库的基本名称。
Note
对于 PostgreSQL 本身内置的函数,位代码将安装在$pkglibdir/bitcode/postgres
中。
32 .4.2. 可插拔 JIT 提供程序
PostgreSQL 提供了基于 LLVM 的 JIT 实现。 JIT 提供程序的接口是可插入的,并且可以在不重新编译的情况下更改提供程序(尽管当前,构建过程仅提供 LLVM 的内联支持数据)。通过设置jit_provider选择活动的提供者。
32 .4.2.1. JIT 提供者接口
通过动态加载命名的共享库来加载 JIT 提供程序。普通库搜索路径用于查找库。为了提供所需的 JIT 提供者回调并指示该库实际上是 JIT 提供者,它需要提供一个名为_PG_jit_provider_init
的 C 函数。该函数传递了一个结构,该结构需要用各个操作的回调函数指针填充:
struct JitProviderCallbacks
{
JitProviderResetAfterErrorCB reset_after_error;
JitProviderReleaseContextCB release_context;
JitProviderCompileExprCB compile_expr;
};
extern void _PG_jit_provider_init(JitProviderCallbacks *cb);