SPI_execute_plan_extended — 執行由 SPI_prepare
準備的語句
int SPI_execute_plan_extended(SPIPlanPtrplan
, const SPIExecuteOptions *options
)
SPI_execute_plan_extended
執行由 SPI_prepare
或其同級函式準備的語句。此函式等效於 SPI_execute_plan
,不同之處在於傳遞給查詢的引數值的呈現方式不同,並且可以傳遞額外的執行控制選項。
查詢引數值由 ParamListInfo
結構表示,該結構方便傳遞已採用該格式的值。還可以透過 ParamListInfo
中指定的鉤子函式使用動態引數集。
此外,與始終將結果元組累積到 SPI_tuptable
結構不同,元組可以在生成時傳遞給呼叫者提供的 DestReceiver
物件。這對於可能生成大量元組的查詢特別有用,因為資料可以即時處理,而不是累積在記憶體中。
SPIPlanPtr plan
已準備好的語句(由 SPI_prepare
返回)
const SPIExecuteOptions * options
包含可選引數的結構體
呼叫者應始終將整個 options
結構體清零,然後填充他們想要設定的欄位。這確保了程式碼的向前相容性,因為在未來新增到該結構體中的任何欄位都將被定義為如果它們為零時,則以向後相容的方式執行。目前可用的 options
欄位有:
ParamListInfo params
包含查詢引數型別和值的結構;如果沒有則為 NULL
bool read_only
只讀執行時為 true
bool allow_nonatomic
true
允許 CALL 和 DO 語句的非原子執行(但除非將 SPI_OPT_NONATOMIC
標誌傳遞給 SPI_connect_ext
,否則將忽略此欄位)。
bool must_return_tuples
如果為 true
,則在查詢不是返回元組的型別時引發錯誤(這不禁止恰好返回零個元組的情況)。
uint64 tcount
要返回的最大行數,或 0
表示無限制
DestReceiver * dest
將接收查詢發出的任何元組的 DestReceiver
物件;如果為 NULL,則結果元組將累積到 SPI_tuptable
結構中,就像在 SPI_execute_plan
中一樣。
ResourceOwner owner
將在執行計劃期間持有計劃引用計數的資源所有者。如果為 NULL,則使用 CurrentResourceOwner。對於非儲存的計劃,此引數將被忽略,因為 SPI 不會獲取這些計劃的引用計數。
返回值與 SPI_execute_plan
相同。
當 options->dest
為 NULL 時,SPI_processed
和 SPI_tuptable
的設定與 SPI_execute_plan
中的相同。當 options->dest
不為 NULL 時,SPI_processed
被設定為零,SPI_tuptable
被設定為 NULL。如果需要元組計數,則呼叫者的 DestReceiver
物件必須計算它。
如果您在文件中看到任何不正確、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用 此表格 報告文件問題。