服务器编程接口 (SPI) 给我们在用户定义的C函数里面运行 SQL 查询的能力。 SPI 是一套接口函数,用于简化对分析器,规划器,优化器,和执行器的访问。 SPI 还进行一些内存管理的工作。
注意: 过程语言的存在也提供了其它的一些在过程里执行 SQL 命令的方法。 这些语言中的大部分本身就是基于 SPI的, 因此这份文档可能会对那些语言的用户同样有帮助。
为了避免混淆,我们将使用函数(function) 来代表SPI接口函数, 用过程(procedure) 代表用户用 SPI 定义的 C 函数。
注意,一条通过 SPI 调用的命令失败,那么控制不会返回到你的过程中。 取而代之的是,你的过程执行所在的事务或者子事务作都将回卷。 (这一点看起来可能很奇怪,因为大多数 SPI 函数的文档里都有错误返回习惯。 不过,那些习惯只适用于在 SPI 函数自己内部检测到的错误。) 我们可以通过在你自己的可能失败的 SPI 调用周围建立一个子事务的方法来在错误之后恢复。 目前我们还没有写这方面的文档,因为所需要的机制仍然在变化。
如果执行成功了,SPI 函数返回一个非负结果 (或者通过返回一个整数值或放在全局变量SPI_result里, 象下面描述的那样)。出错时,返回一个负数或 NULL 结果。
使用 SPI 的源代码文件必须包含头文件 executor/spi.h。