PostgreSQL 可擴(kuò)展性

2021-09-01 18:05 更新
31.4.1. 對(duì)擴(kuò)展的內(nèi)聯(lián)支持
31.4.2. 可插拔的JIT提供者

31.4.1. 對(duì)擴(kuò)展的內(nèi)聯(lián)支持

PostgreSQLJIT實(shí)現(xiàn)可以內(nèi)聯(lián)C以及internal類型的函數(shù)體,還有基于這類函數(shù)的操作符。為了能對(duì)擴(kuò)展中的函數(shù)這樣做,需要讓那些函數(shù)的定義可用。在使用PGXS對(duì)一個(gè)已經(jīng)編譯有LLVM JIT支持的服務(wù)器構(gòu)建一個(gè)擴(kuò)展時(shí),相關(guān)的文件將被自動(dòng)構(gòu)建并且安裝。

相關(guān)的文件必須被安裝在$pkglibdir/bitcode/$extension/中并且對(duì)它們的一份概要必須被安裝在$pkglibdir/bitcode/$extension.index.bc中,其中$pkglibdirpg_config --pkglibdir返回的目錄里,而 $extension是擴(kuò)展的共享庫(kù)的基礎(chǔ)名稱。

注意

對(duì)于編譯在PostgreSQL本身中的函數(shù),其bitcode被安裝在$pkglibdir/bitcode/postgres。

31.4.2. 可插拔的JIT提供者

PostgreSQL提供一種基于LLVMJIT實(shí)現(xiàn)。JIT提供者的接口是可插拔的,可以無(wú)需重編譯就能改變提供者(盡管當(dāng)前構(gòu)建過(guò)程僅提供了對(duì)LLVM的內(nèi)聯(lián)支持?jǐn)?shù)據(jù))?;钴S的提供者通過(guò)設(shè)置 jit_provider來(lái)選擇。

31.4.2.1. JIT提供者接口

JIT提供者需要通過(guò)動(dòng)態(tài)裝載其共享庫(kù)來(lái)載入。正常的搜索路徑被用來(lái)定位該庫(kù)。為了提供所要求的JIT提供者回調(diào)并且表示該庫(kù)實(shí)際上是一個(gè)JIT提供者,它需要提供一個(gè)名為_PG_jit_provider_init的C函數(shù)。會(huì)有一個(gè)結(jié)構(gòu)被傳入這個(gè)函數(shù),在函數(shù)中應(yīng)該用回調(diào)函數(shù)指針來(lái)填充該結(jié)構(gòu):

struct JitProviderCallbacks { JitProviderResetAfterErrorCB reset_after_error; JitProviderReleaseContextCB release_context; JitProviderCompileExprCB compile_expr; }; extern void _PG_jit_provider_init(JitProviderCallbacks *cb);


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)