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
对象必须计算它。
如果您在文档中看到任何不正确、与您对特定功能的体验不符或需要进一步澄清的内容,请使用 此表格 报告文档问题。