支持的版本:当前 (17) / 16 / 15 / 14
开发版本:开发版

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 对象必须计算它。

提交更正

如果您发现文档中的任何内容不正确、与您使用特定功能的经验不符或需要进一步澄清,请使用此表单报告文档问题。