↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 6.5 / 6.4
历史版本。 PostgreSQL 7.0 已结束支持。 请参阅 当前版本手册.

第 48 章 服务器编程接口

Vadim Mikheev

目录

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 的计划

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.