2024 年 9 月 26 日: PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 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);

提交更正

如果您在文档中看到任何不正确的内容,与您对特定功能的体验不符或需要进一步说明,请使用 此表格 报告文档问题。