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

SPI_execute_extended

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_connect_ext 传递了 SPI_OPT_NONATOMIC 标志时才会忽略此字段)

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_processedSPI_tuptable 设置方式与 SPI_execute 中相同。当 options->dest 不为 NULL 时,SPI_processed 设置为零,SPI_tuptable 设置为 NULL。如果需要元组计数,则调用者的 DestReceiver 对象必须计算它。

提交更正

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