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 / 7.2 / 7.1

ecpg

ecpg — C 語言嵌入式 SQL 預處理器

概要

ecpg [選項...] 檔案...

描述

ecpg 是 C 語言程式的嵌入式 SQL 預處理器。它透過將 SQL 呼叫替換為特殊的函式呼叫,將帶有嵌入式 SQL 語句的 C 程式轉換為標準的 C 程式碼。然後,這些輸出檔案可以由任何 C 編譯器工具鏈進行處理。

ecpg 會將命令列中提供的每個輸入檔案轉換為相應的 C 輸出檔案。如果輸入檔名沒有副檔名,則假定為 .pgc。該檔案的副檔名將被替換為 .c 來構建輸出檔名。但是,可以使用 -o 選項覆蓋輸出檔名。

如果輸入檔名只是 -ecpg 將從標準輸入讀取程式(並寫入標準輸出,除非使用 -o 覆蓋)。

本參考頁不描述嵌入式 SQL 語言。有關該主題的更多資訊,請參閱 第 34 章

選項

ecpg 接受以下命令列引數:

-c

從 SQL 程式碼自動生成 C 程式碼。目前,這適用於 EXEC SQL TYPE

-C 模式

設定相容模式。模式可以是 INFORMIXINFORMIX_SEORACLE

-D 符號[=]

定義一個預處理器符號,等同於 EXEC SQL DEFINE 指令。如果未指定 ,則該符號將被定義為值 1

-h

處理標頭檔案。指定此選項時,輸出副檔名變為 .h 而不是 .c,預設輸入副檔名為 .pgh 而不是 .pgc。此外,-c 選項將被強制啟用。

-i

解析系統包含檔案。

-I 目錄

指定一個額外的包含路徑,用於查詢透過 EXEC SQL INCLUDE 包含的檔案。預設路徑順序為:.(當前目錄)、/usr/local/include、編譯時定義的 PostgreSQL 包含目錄(預設:/usr/local/pgsql/include)以及 /usr/include

-o 檔名

指定 ecpg 應將其所有輸出寫入給定的 檔名。寫入 -o - 可將所有輸出傳送到標準輸出。

-r 選項

選擇執行時行為。選項可以是以下之一:

no_indicator

不使用指示符,而是使用特殊值來表示 NULL 值。歷史上,有些資料庫採用過這種方法。

prepare

在使用所有語句之前預先準備它們。Libecpg 將維護一個預備語句快取,並在再次執行語句時重用它。如果快取已滿,libecpg 將釋放使用最少的語句。

questionmarks

出於相容性考慮,允許使用問號作為佔位符。這曾經是很久以前的預設設定。

-t

啟用事務自動提交。在此模式下,除非顯式事務塊,否則每個 SQL 命令都會自動提交。在預設模式下,命令僅在發出 EXEC SQL COMMIT 時提交。

-v

列印附加資訊,包括版本和“include”路徑。

--version

列印 ecpg 版本並退出。

-?
--help

顯示關於 ecpg 命令列引數的幫助資訊,然後退出。

註釋

編譯預處理後的 C 程式碼檔案時,編譯器需要能夠找到 ECPG 標頭檔案在 PostgreSQL 包含目錄中。因此,呼叫編譯器時可能需要使用 -I 選項(例如,-I/usr/local/pgsql/include)。

使用帶有嵌入式 SQL 的 C 程式碼的程式必須連結 libecpg 庫,例如使用連結器選項 -L/usr/local/pgsql/lib -lecpg

安裝適用的上述任一目錄的值可以透過 pg_config 獲取。

示例

如果您的嵌入式 SQL C 原始檔名為 prog1.pgc,您可以使用以下命令序列來建立可執行程式:

ecpg prog1.pgc
cc -I/usr/local/pgsql/include -c prog1.c
cc -o prog1 prog1.o -L/usr/local/pgsql/lib -lecpg

提交更正

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