↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 6.3
历史版本PostgreSQL 6.3 已于 2003 年 3 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页。

第 40 章 服务器编程接口

Vadim Mikheev

目录

40.1. 接口函数
SPI_connect — 将你的过程连接到 SPI 管理器。
SPI_finish — 将你的过程与 SPI 管理器断开连接。
SPI_exec — 创建一个执行计划(解析器+规划器+优化器)并执行查询。
SPI_prepare — 将你的过程连接到 SPI 管理器。
SPI_saveplan — 保存传入的计划
SPI_execp — 执行由 SPI_saveplan 准备或返回的计划
40.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 — 从上层执行器上下文中释放内存
40.3. 内存管理
40.4. 数据更改的可见性
40.5. 示例

服务器编程接口(SPI)是一次让用户能够在用户定义的 C 函数中运行 SQL 查询的尝试。鉴于当前版本的 Postgres 缺少一种合适的过程语言(PL), SPI 是编写服务器存储过程和触发器的唯一方法。将来, SPI 将被用作某种 PL 的“主力”。

实际上,SPI 只是一组简化对解析器、规划器、优化器和 执行器访问的本地接口函数。SPI 还做一部分内存管理 工作。

为避免误解,我们用函数指 SPI 接口函数,而用过程指使用 SPI 的用户定义 C 函数。

SPI 过程总是由某个(上层)执行器调用,而 SPI 管理器使用执行器来运行你的查询。执行器在运行 来自你的过程的查询时,还可能调用其他过程。

注意,如果在执行来自过程的查询期间事务被中止,控制将不会返回到你的 过程。相反,所有工作都会被回滚,服务器会等待客户端的下一条命令。 这一点在未来的版本中会被改变。

其他限制是无法执行 BEGIN、END 和 ABORT(事务控制语句)以及游标操作。 这一点将来也会被改变。

成功时,SPI 函数返回非负结果(或者通过整型返回值 返回,或者如下文所述存放在全局变量 SPI_result 中)。出错时,将返回 负值或 NULL。

40.1. 接口函数

SPI_connect — 将你的过程连接到 SPI 管理器。
SPI_finish — 将你的过程与 SPI 管理器断开连接。
SPI_exec — 创建一个执行计划(解析器+规划器+优化器)并执行查询。
SPI_prepare — 将你的过程连接到 SPI 管理器。
SPI_saveplan — 保存传入的计划
SPI_execp — 执行由 SPI_saveplan 准备或返回的计划

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。