Postgresql 中文操作指南

SPI_execute_plan_extended

SPI_execute_plan_extended — 执行由 SPI_prepare 准备的语句

Synopsis

int SPI_execute_plan_extended(SPIPlanPtr plan,
                              const SPIExecuteOptions * options)

Description

SPI_execute_plan_extended 执行由 SPI_prepare 或其同级准备的语句。该函数等效于 SPI_execute_plan ,不同的是,以不同的方式呈现要传递到该查询的参数值的详细信息,并且可以传递额外的执行控制选项。

查询参数值由一个 ParamListInfo 结构表示,这对于传递该格式中已有的值非常方便。还可以通过在 ParamListInfo 中指定挂钩函数来使用动态参数集。

此外,除了总是将结果元组累积到一个 SPI_tuptable 结构中之外,元组还可以被传递到调用者提供的 DestReceiver 对象中,就像它们由执行程序生成时一样。这对于可能生成众多元组的查询特别有用,因为可以动态地处理数据,而不是将数据累积到内存中。

Arguments

  • SPIPlanPtr _plan_

    • * 已准备好的语句(由 SPI_prepare 返回)

  • 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_plan 中一样

  • ResourceOwner _owner_

    • 资源所有者在执行计划时将持有该计划的引用计数。如果为 NULL,则使用 CurrentResourceOwner。对未保存的计划忽略此项,因为 SPI 不会在这些计划上获取引用计数。

Return Value

返回值同 SPI_execute_plan

options→dest 为 NULL 时, SPI_processedSPI_tuptable 设置为 SPI_execute_plan 中的值。当 options→dest 不为 NULL 时, SPI_processed 设置为 0, SPI_tuptable 设置为 NULL。如果需要元组计数,则调用方的 DestReceiver 对象必须计算它。