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

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

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 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.3 已于 2007 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

第 17 章 服务器编程接口

Vadim Mikheev

目录

17.1. 接口函数
SPI_connect — 将你的过程连接到 SPI 管理器。
SPI_finish — 将你的过程与 SPI 管理器断开连接。
SPI_exec — 创建一个执行计划(解析器+规划器+优化器)并执行查询。
SPI_prepare — 为查询准备一个计划,但暂不执行
SPI_execp — 执行来自 SPI_prepare 的计划
SPI_cursor_open — 使用由 SPI_prepare 创建的计划建立一个游标
SPI_cursor_find — 按名称查找现有的游标(Portal)
SPI_cursor_fetch — 从一个游标中取出一些行
SPI_cursor_move — 移动游标
SPI_cursor_close — 关闭一个游标
SPI_saveplan — 保存传入的计划
17.2. 接口支持函数
SPI_fnumber — 查找指定属性名称的属性编号
SPI_fname — 查找指定属性编号的属性名称
SPI_getvalue — 返回指定属性的字符串值
SPI_getbinval — 返回指定属性的二进制值
SPI_gettype — 返回指定属性的类型名称
SPI_gettypeid — 返回指定属性的类型 OID
SPI_getrelname — 返回指定关系的名称
17.3. 内存管理
SPI_copytuple — 在上层执行器上下文中创建元组的副本
SPI_copytupledesc — 在上层执行器上下文中创建元组描述符的副本
SPI_copytupleintoslot — 在上层执行器上下文中创建元组及其描述符的副本
SPI_modifytuple — 通过替换给定元组中的选定字段来创建一个元组
SPI_palloc — 在上层执行器上下文中分配内存
SPI_repalloc — 在上层执行器上下文中重新分配内存
SPI_pfree — 在上层执行器上下文中释放内存
SPI_freetuple — 释放先前在上层执行器上下文中分配的元组
SPI_freetuptable — 释放由 SPI_exec 或类似函数创建的元组集
SPI_freeplan — 释放一个先前保存的计划
17.4. 数据更改的可见性
17.5. 示例

服务器编程接口 (SPI)使用户能够在用户定义的 C 函数中运行 SQL 查询。

注意

可用的过程语言(PL)提供了另一种构建可执行查询的 函数的方法。

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

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

使用 SPI 的过程由执行器调用。这些 SPI 调用又会递归地调用执行器来运行查询。当执行器被递归调用时,它自己也可能 调用过程,而这些过程又可能发起 SPI 调用。

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

一个相关的限制是无法执行 BEGIN、END 和 ABORT(事务控制语句)。这一 点将来也会被改变。

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

17.1. 接口函数 #

SPI_connect — 将你的过程连接到 SPI 管理器。
SPI_finish — 将你的过程与 SPI 管理器断开连接。
SPI_exec — 创建一个执行计划(解析器+规划器+优化器)并执行查询。
SPI_prepare — 为查询准备一个计划,但暂不执行
SPI_execp — 执行来自 SPI_prepare 的计划
SPI_cursor_open — 使用由 SPI_prepare 创建的计划建立一个游标
SPI_cursor_find — 按名称查找现有的游标(Portal)
SPI_cursor_fetch — 从一个游标中取出一些行
SPI_cursor_move — 移动游标
SPI_cursor_close — 关闭一个游标
SPI_saveplan — 保存传入的计划

提交更正

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