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

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

目錄

45.1. 介面函式
SPI_connect — 將 C 函式連線到 SPI 管理器
SPI_finish — 將 C 函式從 SPI 管理器斷開連線
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 — 返回 true,表示由 SPI_prepare 準備的語句是否可用於 SPI_cursor_open
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 — 在上層執行器上下文中分配記憶體
SPI_repalloc — 在上層執行器上下文中重新分配記憶體
SPI_pfree — 釋放上層執行器上下文中分配的記憶體
SPI_copytuple — 在上層執行器上下文中複製一行
SPI_returntuple — 準備將一行作為 Datum 返回
SPI_modifytuple — 透過替換給定行的選定欄位來建立一行
SPI_freetuple — 釋放在上層執行器上下文中分配的一行
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

提交更正

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