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