SPI_execute_extended
SPI_execute_extended — 执行使用外部参数的命令
大纲
int SPI_execute_extended(const char *command, const SPIExecuteOptions *options)
描述
SPI_execute_extended 执行一条可能包含外部提供参数引用的命令。命令文本中的参数引用写作
$,而
noptions->params 对象(如果提供)则为每个这类符号提供对应的值和类型信息。还可以在
options 结构体中指定各种执行选项。
options->params 对象通常应当为每个参数都设置
PARAM_FLAG_CONST 标志,因为该查询总是使用一次性计划。
如果 options->dest 不为 NULL,则结果元组会在执行器生成时直接传给该对象,而不是累积到
SPI_tuptable 中。对于可能生成大量元组的查询,使用调用者提供的 DestReceiver 对象尤其有用,因为这样可以边产生边处理数据,而不必把它们全部累积在内存里。
参数
const char *command命令字符串
const SPIExecuteOptions *options包含可选参数的结构体
调用者应始终先将整个 options 结构体清零,然后再填写想设置的字段。这样可以保证代码的前向兼容性,因为未来添加到该结构体中的任何字段,都会被定义为在取零值时保持向后兼容。当前可用的
options 字段如下:
ParamListInfoparams包含查询参数类型和值的数据结构;没有参数时为 NULL
boolread_onlytrue表示只读执行boolallow_nonatomictrue允许以非原子方式执行CALL和DO语句(但除非向SPI_connect_ext传入了SPI_OPT_NONATOMIC标志,否则该字段会被忽略)boolmust_return_tuples如果为
true,当查询不属于返回元组的类型时就报错(但这并不禁止其恰好返回零个元组)uint64tcount要返回的最大行数,或者用
0表示不限制DestReceiver *dest用于接收查询发出的任意元组的
DestReceiver对象;如果为 NULL,则结果元组会像SPI_execute一样累积到SPI_tuptable结构体中ResourceOwnerowner该字段是为了与
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 对象自行计算。
报告文档问题
阅读 上游文档. 通过 PostgreSQL 文档反馈表单.