支援的版本:目前 (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 管理較大專案的建置過程,則將以下隱式規則包含到您的 makefiles 中可能很方便

ECPG = ecpg

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

ecpg 命令的完整語法在 ecpg 中有詳細說明。

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

提交更正

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