Skip to content

32.4. 可扩展性#

32.4.1. 扩展的内联支持
32.4.2. 可插入的 提供程序

32.4.1. 扩展的内联支持#

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

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

注意

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

32.4.2. 可插入的JIT提供程序#

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

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