历史版本。 PostgreSQL 6.4 已结束支持。 请参阅 当前版本手册.
第 48 章 服务器编程接口
目录
- 48.1. 接口函数
- SPI_connect — 将你的过程连接到 SPI 管理器。
- SPI_finish — 将你的过程与 SPI 管理器断开连接。
- SPI_exec — 创建一个执行计划(解析器+规划器+优化器)并执行查询。
- SPI_prepare — 将你的过程连接到 SPI 管理器。
- SPI_saveplan — 保存传入的计划
- SPI_execp — 执行来自
SPI_saveplan的计划
- 48.2. 接口支持函数
- SPI_copytuple — 在上层执行器上下文中创建元组的副本
- SPI_modifytuple — 修改关系的元组
- SPI_fnumber — 查找指定属性的属性编号
- SPI_fname — 查找指定属性的属性名称
- SPI_getvalue — 返回指定属性的字符串值
- SPI_getbinval — 返回指定属性的二进制值
- SPI_gettype — 返回指定属性的类型名称
- SPI_gettypeid — 返回指定属性的类型 OID
- SPI_getrelname — 返回指定关系的名称
- SPI_palloc — 在上层执行器上下文中分配内存
- SPI_repalloc — 在上层执行器上下文中重新分配内存
- SPI_pfree — 从上层执行器上下文中释放内存
- 48.3. 内存管理
- 48.4. 数据更改的可见性
- 48.5. 示例
服务器编程接口(SPI)使用户能够在用户定义的 C 函数中运行 SQL 查询。可用的过程语言(PL)提供了访问这些能力的另一种方法。
实际上,SPI 只是一组简化对解析器、规划器、优化器和执行器访问的本地接口函数。SPI 还做一部分内存管理工作。
为避免误解,我们用函数指 SPI 接口函数,而用过程指使用 SPI 的用户定义 C 函数。
SPI 过程总是由某个(上层)执行器调用,而 SPI 管理器使用执行器来运行你的查询。执行器在运行来自你的过程的查询时,还可能调用其他过程。
注意,如果在执行来自过程的查询期间事务被中止,控制将不会返回到你的过程。相反,所有工作都会被回滚,服务器会等待客户端的下一条命令。这一点在未来的版本中会被改变。
其他限制是无法执行 BEGIN、END 和 ABORT(事务控制语句)以及游标操作。这一点将来也会被改变。
成功时,SPI 函数返回非负结果(或者通过整型返回值返回,或者如下文所述存放在全局变量 SPI_result 中)。出错时,将返回负值或 NULL。
48.1. 接口函数
- SPI_connect — 将你的过程连接到 SPI 管理器。
- SPI_finish — 将你的过程与 SPI 管理器断开连接。
- SPI_exec — 创建一个执行计划(解析器+规划器+优化器)并执行查询。
- SPI_prepare — 将你的过程连接到 SPI 管理器。
- SPI_saveplan — 保存传入的计划
- SPI_execp — 执行来自
SPI_saveplan的计划