32.4. Extensibility

32 .4.1. 内联扩展支持

PostgreSQL 的 JIT 实现可以内联Cinternal类型的函数体,以及基于此类函数的运算符。为此,对于扩展中的功能,需要使这些功能的定义可用。当使用PGXS对已使用 LLVM JIT 支持编译的服务器构建扩展时,将自动构建并安装相关文件。

必须将相关文件安装到$pkglibdir/bitcode/$extension/并将它们的摘要安装到$pkglibdir/bitcode/$extension.index.bc,其中$pkglibdirpg_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);
上一章 首页 下一章