支援的版本:目前 (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 中,其中 $pkglibdir 是由 pg_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);

提交更正

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