PostgreSQL 18 中文参考文档(未翻译部分保留英文)🌐 切换到英文原版 →

30.4. 可扩展性 #

30.4.1. 扩展函数的内联支持
30.4.2. 可插拔 JIT 提供程序

30.4.1. 扩展函数的内联支持 #

第三方通过 PGXS 为 PostgreSQL 开发编写自定义扩展插件时,只要宿主编译了 LLVM 支持,打包工具链会自动为 C 语言函数编译生成对应的 LLVM 位码(Bitcode)文件(存放在 $pkglibdir/bitcode/ 中),使自定义插件函数同样能够享受被核心查询 JIT 内联展开的顶级加速红利。

30.4.2. 可插拔 JIT 提供程序 #

PostgreSQL 提供了基于 LLVM 的 JIT 实现。JIT 提供程序接口是可插拔的,无需重新编译即可切换提供程序(通过参数 jit_provider 选择)。

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