SPI_execute_extended
SPI_execute_extended — 使用离线参数执行命令
语法
int SPI_execute_extended(const char *command,
const SPIExecuteOptions * options)
描述
SPI_execute_extended
执行可能包含对外部提供参数的引用的命令。命令文本将参数称为$*
n*
,而*options->params
对象(如果提供)为每个此类符号提供值和类型信息。各种执行选项也可以在options
*结构中指定。
*options->params
*对象通常应使用PARAM_FLAG_CONST
标志标记每个参数,因为查询总是使用一次性计划。
如果*options->dest
*不为 NULL,则结果元组会传递给该对象,因为它们是由执行器生成的,而不是累积在SPI_tuptable
中。使用调用者提供的DestReceiver
对象对于可能生成许多元组的查询特别有帮助,因为可以实时处理数据,而不是在内存中累积数据。
参数
const char *
command
命令字符串
const SPIExecuteOptions *
options
包含可选参数的结构
调用者应始终将整个*options
结构清零,然后填充他们想要设置的任何字段。这确保了代码的前向兼容性,因为将来添加到结构中的任何字段都被定义为在为零时向后兼容。当前可用的options
*字段是
ParamListInfo
params
包含查询参数类型和值的 data 结构;如果无,则为 NULL
bool
read_only
true
表示只读执行bool
allow_nonatomic
true
允许 CALL 和 DO 语句的非原子执行bool
must_return_tuples
如果
true
,则在查询不是返回元组的类型时引发错误(这不禁止它碰巧返回零元组的情况)uint64
tcount
要返回的最大行数,或
0
表示无限制DestReceiver *
dest
DestReceiver
对象,它将接收查询发出的任何元组;如果为 NULL,则结果元组会累积到SPI_tuptable
结构中,如SPI_execute
中所示ResourceOwner
owner
此字段存在是为了与
SPI_execute_plan_extended
保持一致,但它会被忽略,因为SPI_execute_extended
使用的计划永远不会保存。
返回值
返回值与SPI_execute
相同。
当*options->dest
为 NULL 时,SPI_processed
和SPI_tuptable
的设置与SPI_execute
中相同。当options->dest
*不为 NULL 时,SPI_processed
设置为零,SPI_tuptable
设置为 NULL。如果需要元组计数,则调用者的DestReceiver
对象必须计算它。