支持的版本:当前 (17) / 16 / 15 / 14 / 13
开发版本:devel
不支持的版本:12 / 11

30.4. 可扩展性 #

30.4.1. 扩展的内联支持 #

PostgreSQLJIT实现可以内联类型为 Cinternal 的函数主体,以及基于这些函数的运算符。为了对扩展中的函数执行此操作,需要提供这些函数的定义。当使用 PGXS 构建针对已使用 LLVM JIT 支持编译的服务器的扩展时,将自动构建和安装相关文件。

相关文件必须安装到 $pkglibdir/bitcode/$extension/ 中,并将它们的摘要安装到 $pkglibdir/bitcode/$extension.index.bc 中,其中 $pkglibdirpg_config --pkglibdir 返回的目录,$extension 是扩展共享库的基本名称。

注意

对于内置到 PostgreSQL 本身的函数,位代码安装到 $pkglibdir/bitcode/postgres 中。

30.4.2. 可插拔的JIT提供程序 #

PostgreSQL 提供了一个JIT基于 LLVM 的实现。到JIT提供程序的接口是可插拔的,并且可以在不重新编译的情况下更改提供程序(尽管目前,构建过程仅为 LLVM 提供内联支持数据)。活动提供程序通过设置 jit_provider 选择。

30.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);

提交更正

如果您在文档中发现任何不正确、与您使用特定功能的体验不符或需要进一步澄清的内容,请使用此表单报告文档问题。