pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
目录
SPI_saveplan 的计划服务器编程接口 (SPI)使用户能够在用户定义的 C 函数中运行 SQL 查询。 可用的过程语言(PL)提供了访问这些能力的另一种 方法。
实际上,SPI 只是一组简化对解析器、规划器、优化器和 执行器访问的本地接口函数。SPI 还做一部分内存管理 工作。
为避免误解,我们用函数指 SPI 接口函数,而用过程指使用 SPI 的用户定义 C 函数。
使用 SPI 的过程由执行器调用。这些 SPI 调用又会递归地调用执行器来运行查询。当执行器被递归调用时,它自己也可能 调用过程,而这些过程又可能发起 SPI 调用。
注意,如果在执行来自过程的查询期间事务被中止,控制将不会返回到你的 过程。相反,所有工作都会被回滚,服务器会等待客户端的下一条命令。 这一点在未来的版本中会被改变。
其他限制是无法执行 BEGIN、END 和 ABORT(事务控制语句)以及游标操作。 这一点将来也会被改变。
成功时,SPI 函数返回非负结果(或者通过整型返回值 返回,或者如下文所述存放在全局变量 SPI_result 中)。出错时,将返回 负值或 NULL。
SPI_saveplan 的计划译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。