支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11

30.4. 可擴展性 #

30.4.1. 對於擴充功能的 Inlining 支援 #

PostgreSQLJIT實作可以內聯 Cinternal 類型函數的主體,以及基於這些函數的運算符。要對擴充功能中的函數執行此操作,需要提供這些函數的定義。當使用 PGXS 建置針對已使用 LLVM JIT 支援編譯的伺服器的擴充功能時,將自動建置和安裝相關檔案。

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

注意

對於建置到 PostgreSQL 本身中的函數,位元碼會安裝到 $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);

提交更正

如果您在文件中看到任何不正確、與您使用特定功能的經驗不符或需要進一步說明的地方,請使用此表單來報告文件問題。