2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14
開發版本: devel

SPI_execute_plan_extended

SPI_execute_plan_extended — 執行由 SPI_prepare 準備的語句

概要

int SPI_execute_plan_extended(SPIPlanPtr plan,
                              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_processedSPI_tuptable 的設定與 SPI_execute_plan 中的相同。當 options->dest 不為 NULL 時,SPI_processed 被設定為零,SPI_tuptable 被設定為 NULL。如果需要元組計數,則呼叫者的 DestReceiver 物件必須計算它。

提交更正

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