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
包含查询参数类型和值的数据结构;如果无,则为 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
中所示
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
对象必须计算它。
如果您在文档中发现任何不正确、与您使用特定功能的经验不符或需要进一步澄清的内容,请使用此表单报告文档问题。