服务器编程接口 (SPI) 给我们在用户定义的C函数里面运行 SQL 查询的能力。 SPI 是一套接口函数,用于简化对分析器,规划器,优化器,和执行器的访问。 SPI 还进行一些内存管理的工作。
注意: 过程语言的存在也提供了其它的一些在过程里执行 SQL 命令的方法。 这些语言中的一部分本身就是基于 SPI 或者以 SPI 为模版实现的, 因此这份文档可能会对那些语言的用户同样有帮助。
为了避免混淆,我们将使用函数(function) 来代表SPI接口函数, 用过程(procedure) 代表用户用 SPI 定义的 C 函数。
注意,如果在你的过程里执行查询时,事务退出了,那么控制不会返回到你的过程中。 相反,所有工作都将回卷并且服务器将等待客户端的另一个命令。 一个相关的限制是在过程中不能执行 BEGIN,COMMIT,和 ROLLBACK (事务控制语句)。这两点都可能会在以后的版本中修正。
如果执行成功了,SPI 函数返回一个非负结果 (或者通过返回一个整数值或放在全局变量SPI_result里, 象下面描述的那样)。出错时,返回一个负数或 NULL 结果。
使用 SPI 的源代码文件必须包含头文件 executor/spi.h。