↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 7.3 / 7.2 / 7.1 / 7.0 / 6.5 / 6.4
历史版本PostgreSQL 7.3 已于 2007 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页。

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。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。