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
中指定的 Hook 函數使用動態參數集。
此外,Tuple 不總是累積到 SPI_tuptable
結構中,而是可以在執行器產生 Tuple 時,將 Tuple 傳遞到呼叫者提供的 DestReceiver
物件。這對於可能產生許多 Tuple 的查詢特別有用,因為資料可以即時處理,而不是累積在記憶體中。
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
,如果查詢不是傳回 Tuple 的類型,則引發錯誤(這不會禁止它碰巧傳回零個 Tuple 的情況)
uint64 tcount
要傳回的最大列數,或者如果沒有限制則為 0
DestReceiver * dest
DestReceiver
物件,它將接收查詢發出的任何 Tuple;如果為 NULL,則結果 Tuple 將累積到 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。 如果需要 Tuple 計數,則呼叫者的 DestReceiver
物件必須計算它。
如果您在文件中看到任何不正確、與您使用特定功能的經驗不符或需要進一步說明的地方,請使用此表格來報告文件問題。