PostgreSQL 的JIT实现可以内联类型为 C
和 internal
的函数的主体,以及基于此类函数的运算符。要对扩展中的函数执行此操作,需要提供这些函数的定义。当使用 PGXS 构建针对使用 LLVM JIT 支持编译的服务器的扩展时,将自动构建和安装相关文件。
相关文件必须安装到 $pkglibdir/bitcode/$extension/
中,其摘要安装到 $pkglibdir/bitcode/$extension.index.bc
中,其中 $pkglibdir
是 pg_config --pkglibdir
返回的目录,而 $extension
是扩展的共享库的基本名称。
对于内置于 PostgreSQL 本身的函数,字节码安装到 $pkglibdir/bitcode/postgres
中。
PostgreSQL 提供了一个JIT基于 LLVM 的实现。到JIT提供者的接口是可插拔的,并且可以更改提供者,而无需重新编译(尽管目前,构建过程仅为 LLVM 提供内联支持数据)。通过设置 jit_provider 选择活动提供者。
通过动态加载指定的共享库来加载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);
如果您在文档中发现任何不正确、与您使用特定功能的体验不符或需要进一步澄清的内容,请使用此表格报告文档问题。