2024年9月26日: PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14
开发版本:devel

SPI_execute_plan_extended

SPI_execute_plan_extended — 执行由SPI_prepare准备的语句

摘要

int SPI_execute_plan_extended(SPIPlanPtr plan,
                              const SPIExecuteOptions * options)

描述

SPI_execute_plan_extended执行由SPI_prepare或其子函数准备的语句。此函数等效于SPI_execute_plan,除了传递给查询的参数值信息以不同的方式呈现,并且可以传递额外的执行控制选项。

查询参数值由ParamListInfo结构体表示,这对于传递以该格式已经存在的数值非常方便。也可以通过ParamListInfo中指定的钩子函数使用动态参数集。

此外,而不是始终将结果元组累积到SPI_tuptable结构体中,元组可以在执行器生成时传递给调用者提供的DestReceiver对象。对于可能生成许多元组的查询,这特别有用,因为数据可以在运行时处理,而不是累积在内存中。

参数

SPIPlanPtr plan

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

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

ResourceOwner owner

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

返回值

返回值与SPI_execute_plan相同。

options->dest为NULL时,SPI_processedSPI_tuptable设置方式与SPI_execute_plan相同。当options->dest不为NULL时,SPI_processed设置为零,SPI_tuptable设置为NULL。如果需要元组计数,则调用者的DestReceiver对象必须计算它。

提交更正

如果您在文档中看到任何不正确的内容,与您对特定功能的体验不符,或者需要进一步澄清,请使用此表单报告文档问题。