W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
PostgreSQL的JIT實(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
中,其中$pkglibdir
是pg_config --pkglibdir
返回的目錄里,而
$extension
是擴(kuò)展的共享庫(kù)的基礎(chǔ)名稱。
對(duì)于編譯在PostgreSQL本身中的函數(shù),其bitcode被安裝在$pkglibdir/bitcode/postgres
。
PostgreSQL提供一種基于LLVM的JIT實(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)選擇。
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);
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: