Postgresql 中文操作指南

SPI_execute_extended

SPI_execute_extended — 使用不在行中的参数执行命令

Synopsis

int SPI_execute_extended(const char *command,
                         const SPIExecuteOptions * options)

Description

SPI_execute_extended 执行一个命令,该命令可能包含对外部提供的参数的引用。命令文本将参数称为 $_n_ ,而 options→params 对象(如果提供)则为每个此类符号提供值和类型信息。还可以在 options 结构中指定各种执行选项。

由于总是针对查询使用一次性计划,因此 options→params 对象通常应使用 PARAM_FLAG_CONST 标志标记每个参数。

如果 options→dest 不是 NULL,则结果元组将作为执行器生成它们时传递给该对象,而不是累积在 SPI_tuptable 中。使用调用者提供的 DestReceiver 对象对于可能生成多个元组的查询特别有帮助,因为数据可以动态处理,而不是累积在内存中。

Arguments

  • const char * _command_

    • command string

  • const SPIExecuteOptions * _options_

    • struct containing optional arguments

调用者应始终将整个 options 结构清零,然后填写任何他们想要设置的字段。这样可以确保代码的前向兼容性,因为将来添加到结构中的任何字段都被定义为在为零时向后兼容地工作。当前可用的 options 字段为:

  • ParamListInfo _params_

    • 包含查询参数类型和值的 data 结构;如果没有,则为 NULL

  • bool _read_only_

    • true for read-only execution

  • 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 使用的计划从未保存。

Return Value

返回值与 SPI_execute 相同。

options→dest 为 NULL 时, SPI_processedSPI_tuptable 被设定为 SPI_execute 中的值。当 options→dest 不为 NULL 时, SPI_processed 被设定为零而 SPI_tuptable 被设定为 NULL。如果需要元组数,则调用者的 DestReceiver 对象必须计算它。