2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3

34.10. 處理嵌入式 SQL 程式 #

既然您已經瞭解瞭如何構建嵌入式 SQL C 程式,您可能想知道如何編譯它們。在編譯之前,您需要使用嵌入式SQL C預處理器處理該檔案,它會將您使用的SQL語句轉換為特殊的函式呼叫。編譯後,您必須連結一個包含所需函式的特殊庫。這些函式從引數中獲取資訊,使用 libpq 介面執行SQL命令,並將結果放入為輸出指定的引數中。

預處理器程式名為 ecpg,它包含在標準的 PostgreSQL 安裝中。嵌入式 SQL 程式通常以 .pgc 副檔名命名。如果您有一個名為 prog1.pgc 的程式檔案,您可以透過簡單地呼叫以下命令來預處理它:

ecpg prog1.pgc

這將建立一個名為 prog1.c 的檔案。如果您的輸入檔案不遵循建議的命名模式,您可以使用 -o 選項顯式指定輸出檔案。

預處理後的檔案可以正常編譯,例如:

cc -c prog1.c

生成的 C 原始檔包含來自 PostgreSQL 安裝的標頭檔案,因此如果您將 PostgreSQL 安裝在預設未搜尋到的位置,您需要在編譯命令列中新增一個選項,例如 -I/usr/local/pgsql/include

要連結嵌入式 SQL 程式,您需要包含 libecpg 庫,如下所示:

cc -o myprog prog1.o prog2.o ... -lecpg

同樣,您可能需要在此命令中新增一個選項,例如 -L/usr/local/pgsql/lib

您可以使用 pg_configpkg-config,包名為 libecpg,來獲取您安裝的路徑。

如果您使用 make 管理一個大型專案的構建過程,將以下隱含規則包含到您的 makefile 中可能會很方便:

ECPG = ecpg

%.c: %.pgc
        $(ECPG) $<

ecpg 命令的完整語法在 ecpg 中進行了詳細介紹。

ecpg 庫預設是執行緒安全的。但是,您可能需要使用一些執行緒命令列選項來編譯您的客戶端程式碼。

提交更正

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