2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11

30.4. 可擴充套件性 #

30.4.1. 擴充套件的內聯支援 #

PostgreSQLJIT實現可以內聯型別為 Cinternal 的函式體,以及基於此類函式的運算子。要做到這一點,對於擴充套件中的函式,需要使其定義可用。當使用 PGXS 來針對已使用 LLVM JIT 支援編譯的伺服器構建擴充套件時,相關檔案將自動構建並安裝。

相關檔案必須安裝到 $pkglibdir/bitcode/$extension/,並將其摘要安裝到 $pkglibdir/bitcode/$extension.index.bc,其中 $pkglibdirpg_config --pkglibdir 返回的目錄,而 $extension 是擴充套件共享庫的基本名稱。

注意

對於構建在 PostgreSQL 本身中的函式,其 bitcode 將安裝到 $pkglibdir/bitcode/postgres

30.4.2. 可插入JIT提供者 #

PostgreSQL 提供了一個JIT基於 LLVM 的實現。到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);

提交更正

如果您在文件中發現任何不正確之處、與您對特定功能的體驗不符之處,或需要進一步說明之處,請使用 此表單 報告文件問題。