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

SPI_execute_extended

SPI_execute_extended — 执行使用外部参数的命令

Synopsis

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 允许以非原子方式执行 CALLDO 语句(但除非向 SPI_connect_ext 传入了 SPI_OPT_NONATOMIC 标志,否则该字段会被忽略)

bool must_return_tuples

如果为 true,当查询不属于返回元组的类型时就报错 (但这并不禁止其恰好返回零个元组)

uint64 tcount

要返回的最大行数,或者用 0 表示不限制

DestReceiver * dest

用于接收查询发出的任意元组的 DestReceiver 对象; 如果为 NULL,则结果元组会像 SPI_execute 一样累积 到 SPI_tuptable 结构中

ResourceOwner owner

该字段是为了与 SPI_execute_plan_extended 保持一 致而存在,但会被忽略,因为 SPI_execute_extended 使用的计划从不会被保存

返回值

返回值与 SPI_execute 相同。

options->dest 为 NULL 时, SPI_processedSPI_tuptable 的设置方式与 SPI_execute 相同。当 options->dest 不为 NULL 时, SPI_processed 会被设为零,而 SPI_tuptable 会被设为 NULL。如果需要元组计数,则必 须由调用者提供的 DestReceiver 对象自行计算。

提交更正

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