# 32.4.可扩展性

32.4.1. 对扩展的内联支持

32.4.2. 可插拔的JIT提供者

# 32.4.1.对扩展的内联支持

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

相关文件必须安装到$pkglibdir/bitcode/$extension/并将其总结成$pkglibdir/bitcode/$extension。指数公元前哪里$pkglibdir是由返回的目录吗pg_配置——pkglibdir$extension是扩展共享库的基本名称。

# 笔记

对于内置于PostgreSQL本身的函数,位码安装在$pkglibdir/位码/postgres.

# 32.4.2.可插拔的JIT提供者

PostgreSQL提供了基于LLVM的JIT实现。JIT提供程序的接口是可插入的,可以在不重新编译的情况下更改提供程序(尽管目前,构建过程只提供LLVM的内联支持数据)。通过设置选择活动提供程序准时制_供应商.

# 32.4.2.1.JIT提供程序接口

通过动态加载指定的共享库来加载JIT提供程序。普通库搜索路径用于定位库。要提供所需的JIT提供程序回调,并指示库实际上是一个JIT提供程序,它需要提供一个名为_PG_jit_provider_init.此函数被传递给一个结构,该结构需要为单个操作填充回调函数指针:

struct JitProviderCallbacks
{
    JitProviderResetAfterErrorCB reset_after_error;
    JitProviderReleaseContextCB release_context;
    JitProviderCompileExprCB compile_expr;
};

extern void _PG_jit_provider_init(JitProviderCallbacks *cb);