支援的版本:目前 (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

第 45 章。 伺服器程式設計介面

目錄

45.1. 介面函式
SPI_connect — 連接一個 C 函式到 SPI 管理器
SPI_finish — 從 SPI 管理器斷開一個 C 函式
SPI_execute — 執行一個指令
SPI_exec — 執行一個讀/寫指令
SPI_execute_extended — 執行一個帶有離線參數的指令
SPI_execute_with_args — 執行一個帶有離線參數的指令
SPI_prepare — 準備一個語句,但尚未執行
SPI_prepare_cursor — 準備一個語句,但尚未執行
SPI_prepare_extended — 準備一個語句,但尚未執行
SPI_prepare_params — 準備一個語句,但尚未執行
SPI_getargcount — 返回 SPI_prepare 準備的語句所需的參數數量
SPI_getargtypeid — 返回 SPI_prepare 準備的語句的參數的資料類型 OID
SPI_is_cursor_plan — 如果由 SPI_prepare 準備的語句可以與 SPI_cursor_open 一起使用,則返回 true
SPI_execute_plan — 執行一個由 SPI_prepare 準備的語句
SPI_execute_plan_extended — 執行一個由 SPI_prepare 準備的語句
SPI_execute_plan_with_paramlist — 執行一個由 SPI_prepare 準備的語句
SPI_execp — 在讀/寫模式下執行一個語句
SPI_cursor_open — 使用由 SPI_prepare 建立的語句設定一個游標
SPI_cursor_open_with_args — 使用查詢和參數設定一個游標
SPI_cursor_open_with_paramlist — 使用參數設定一個游標
SPI_cursor_parse_open — 使用查詢字串和參數設定一個游標
SPI_cursor_find — 按名稱尋找現有的游標
SPI_cursor_fetch — 從游標中提取一些列
SPI_cursor_move — 移動游標
SPI_scroll_cursor_fetch — 從游標中提取一些列
SPI_scroll_cursor_move — 移動游標
SPI_cursor_close — 關閉游標
SPI_keepplan — 儲存一個準備好的語句
SPI_saveplan — 儲存一個準備好的語句
SPI_register_relation — 使一個臨時命名關係在 SPI 查詢中通過名稱可用
SPI_unregister_relation — 從註冊表中刪除一個臨時命名關係
SPI_register_trigger_data — 在 SPI 查詢中提供臨時觸發資料
45.2. 介面支援函數
SPI_fname — 決定指定欄位編號的欄位名稱
SPI_fnumber — 決定指定欄位名稱的欄位編號
SPI_getvalue — 傳回指定欄位的字串值
SPI_getbinval — 傳回指定欄位的二進位值
SPI_gettype — 傳回指定欄位的資料類型名稱
SPI_gettypeid — 傳回指定欄位的資料類型 OID
SPI_getrelname — 傳回指定關係的名稱
SPI_getnspname — 傳回指定關係的命名空間
SPI_result_code_string — 以字串形式傳回錯誤碼
45.3. 記憶體管理
SPI_palloc — 在上層執行器上下文 (upper executor context) 中配置記憶體
SPI_repalloc — 在上層執行器上下文 (upper executor context) 中重新配置記憶體
SPI_pfree — 釋放在上層執行器上下文 (upper executor context) 中的記憶體
SPI_copytuple — 在上層執行器上下文 (upper executor context) 中複製一個資料列
SPI_returntuple — 準備將一個 Tuple 作為 Datum 傳回
SPI_modifytuple — 透過取代給定資料列的選定欄位來建立資料列
SPI_freetuple — 釋放在上層執行器上下文 (upper executor context) 中配置的資料列
SPI_freetuptable — 釋放由 SPI_execute 或類似函數建立的資料列集合
SPI_freeplan — 釋放先前儲存的預先處理陳述式
45.4. 交易管理
SPI_commit — 提交目前交易
SPI_rollback — 中止目前交易
SPI_start_transaction — 已過時的函數
45.5. 資料變更的可見性
45.6. 範例

伺服器程式設計介面 (SPI) 讓使用者定義C函數的編寫者能夠在其函數或程序中執行SQL命令。SPI是一組介面函數,用於簡化對剖析器、規劃器和執行器的存取。SPI也會執行一些記憶體管理。

注意

可用的程序語言提供各種方式來從函數執行 SQL 命令。 大部分這些設施都基於 SPI,因此此文件也可能對這些語言的使用者有所幫助。

請注意,如果透過 SPI 呼叫的命令失敗,則控制權不會返回到您的 C 函數。 相反地,將會回滾執行 C 函數的交易或子交易。(鑑於 SPI 函數大多具有記載的錯誤傳回慣例,這可能看似令人驚訝。 但是,這些慣例僅適用於 SPI 函數本身偵測到的錯誤。) 在可能失敗的 SPI 呼叫周圍建立自己的子交易,可以在發生錯誤後恢復控制權。

SPI函數在成功時傳回非負數結果(透過傳回的整數值或在全域變數 SPI_result 中,如下所述)。 出錯時,將傳回負數結果或 NULL

使用 SPI 的原始碼檔案必須包含標頭檔 executor/spi.h

提交更正

如果您在文件中看到任何不正確、與特定功能不符或需要進一步說明的內容,請使用此表單來回報文件問題。