PostgreSQL 的JIT實現可以內聯型別為 C 和 internal 的函式體,以及基於此類函式的運算子。要做到這一點,對於擴充套件中的函式,需要使其定義可用。當使用 PGXS 來針對已使用 LLVM JIT 支援編譯的伺服器構建擴充套件時,相關檔案將自動構建並安裝。
相關檔案必須安裝到 $pkglibdir/bitcode/$extension/,並將其摘要安裝到 $pkglibdir/bitcode/$extension.index.bc,其中 $pkglibdir 是 pg_config --pkglibdir 返回的目錄,而 $extension 是擴充套件共享庫的基本名稱。
對於構建在 PostgreSQL 本身中的函式,其 bitcode 將安裝到 $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);
如果您在文件中發現任何不正確之處、與您對特定功能的體驗不符之處,或需要進一步說明之處,請使用 此表單 報告文件問題。