↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11
开发快照。 PostgreSQL 20devel 尚未正式发布,内容仍可能变化。

30.4. 可扩展性 #

30.4.1. 对扩展的内联支持 #

PostgreSQL 的 JIT 实现可以内联 C 和 internal 类型函数的函数体,以及基于这类函数的操作符。要对扩展中的函数这样做,需要让这些函数的定义可供使用。当使用 PGXS 针对一个编译时启用了 LLVM JIT 支持的服务器构建扩展时,相关文件会自动构建并安装。

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

注意

对于 PostgreSQL 自身内置的函数,bitcode 会安装到 $pkglibdir/bitcode/postgres。

30.4.2. 可插拔的 JIT 提供者 #

PostgreSQL 提供了一个基于 LLVM 的 JIT 实现。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);

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.