Chapter 44. 服务器编程接口

Table of Contents

服务器编程接口(SPI) 给在用户定义的C函数里面运行SQL 查询的能力。SQL是一套接口函数,用于简化对分析器、 规划器和执行器的访问。SQL还进行一些内存管理的工作。

Note: 过程语言的存在也提供了其它的一些在过程里执行 SQL 命令的方法。 这些语言中的大部分本身就是基于 SPI 的, 因此这份文档可能会对那些语言的用户同样有帮助。

为了避免混淆,将使用术语"函数"(function)来代表 SPI接口函数,用"过程"(procedure) 代表用户用SPI定义的 C 函数。

注意,如果一条通过 SPI 调用的命令失败,那么控制不会返回到你的过程中。 取而代之的是,你的过程执行所在的事务或者子事务全部回滚。 这一点看起来可能很奇怪,因为大多数 SPI 函数的文档里都有错误返回习惯。 不过,那些习惯只适用于在 SPI 函数自己内部检测到的错误。 可以通过在你自己的可能失败的 SPI 调用周围建立一个子事务的方法来在错误之后恢复控制。 目前还没有写这方面的文档,因为所需要的机制仍然在变化。

如果执行成功了,SPI函数返回一个非负结果 (或者通过返回一个整数值或放在全局变量SPI_result里, 像下面描述的那样)。出错时,返回一个负数或NULL结果。

使用 SPI 的源代码文件必须包含头文件executor/spi.h