PostgreSQL的JIT實作可以內聯 C
和 internal
類型函數的主體,以及基於這些函數的運算符。要對擴充功能中的函數執行此操作,需要提供這些函數的定義。當使用 PGXS 建置針對已使用 LLVM JIT 支援編譯的伺服器的擴充功能時,將自動建置和安裝相關檔案。
相關檔案必須安裝到 $pkglibdir/bitcode/$extension/
,並將其摘要安裝到 $pkglibdir/bitcode/$extension.index.bc
中,其中 $pkglibdir
是 pg_config --pkglibdir
傳回的目錄,而 $extension
是擴充功能共享程式庫的基礎名稱。
對於建置到 PostgreSQL 本身中的函數,位元碼會安裝到 $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);
如果您在文件中看到任何不正確、與您使用特定功能的經驗不符或需要進一步說明的地方,請使用此表單來報告文件問題。