↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

已结束支持的版本: 7.3 / 7.2 / 7.1 / 7.0 / 6.5 / 6.4
历史版本。 PostgreSQL 7.2 已结束支持。 请参阅 当前版本手册.

SPI_prepare

SPI_prepare — 为查询准备一个计划,但暂不执行

大纲

SPI_prepare(query, nargs, argtypes)

输入

query

查询字符串

nargs

输入参数的数量($1 ... $nargs —— 与 SQL 函数中相同)

argtypes

指向输入参数类型的类型 OID 数组的指针

输出

void *

指向执行计划(解析器+规划器+优化器)的指针

描述

SPI_prepare 创建并返回一个执行计划(解析器+规划器+优化器),但不执行该查询。只应从已连接的过程中调用。

用法

当同一条或相似的查询需要反复执行时,只做一次查询规划可能是有利的。SPI_prepare 把查询字符串转换成一个执行计划,之后可以反复传给 SPI_execp。

预备查询可以通过在普通查询原本应写常量的位置写入参数($1、$2 等)而得到泛化。这些参数的值会在调用 SPI_execp 时指定。这样,预备查询就能适用于比不带参数时更广泛的场景。

注意

不过,这也有一个不利之处:由于规划器不知道将为参数提供什么值,它做出的规划选择可能比在所有常量都可见的简单查询下更差。

如果查询使用了参数,那么在调用 SPI_prepare 时必须指定它们的数量和数据类型。

SPI_prepare 返回的计划只能在当前这次过程调用中使用,因为 SPI_finish 会释放为计划分配的内存。但可以使用 SPI_saveplan 把计划保存得更久。

成功时会返回一个非空指针。否则,将得到 NULL 计划。无论成功还是出错,SPI_result 都会被设成与 SPI_exec 返回值类似的值;但如果 query 为 NULL,或 nargs < 0,或 nargs > 0 且 argtypes 为 NULL,则会将其设为 → SPI_ERROR_ARGUMENT。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.