# 32.4.可扩展性
# 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);