支持的版本: 当前 (17) / 16 / 15 / 14 / 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

第 45 章. 服务器编程接口

目录

45.1. 接口函数
SPI_connect — 将一个 C 函数连接到 SPI 管理器
SPI_finish — 断开一个 C 函数与 SPI 管理器的连接
SPI_execute — 执行一个命令
SPI_exec — 执行一个读/写命令
SPI_execute_extended — 执行一个带有行外参数的命令
SPI_execute_with_args — 执行一个带有行外参数的命令
SPI_prepare — 准备一个语句,但不立即执行
SPI_prepare_cursor — 准备一个语句,但不立即执行
SPI_prepare_extended — 准备一个语句,但不立即执行
SPI_prepare_params — 准备一个语句,但不立即执行
SPI_getargcount — 返回由 SPI_prepare 准备的语句所需的参数数量
SPI_getargtypeid — 返回由 SPI_prepare 准备的语句的参数的数据类型 OID
SPI_is_cursor_plan — 如果由 SPI_prepare 准备的语句可以与 SPI_cursor_open 一起使用,则返回 true
SPI_execute_plan — 执行由 SPI_prepare 准备的语句
SPI_execute_plan_extended — 执行由 SPI_prepare 准备的语句
SPI_execute_plan_with_paramlist — 执行由 SPI_prepare 准备的语句
SPI_execp — 在读/写模式下执行语句
SPI_cursor_open — 使用 SPI_prepare 创建的语句设置一个游标
SPI_cursor_open_with_args — 使用查询和参数设置一个游标
SPI_cursor_open_with_paramlist — 使用参数设置一个游标
SPI_cursor_parse_open — 使用查询字符串和参数设置一个游标
SPI_cursor_find — 按名称查找现有的游标
SPI_cursor_fetch — 从游标中获取一些行
SPI_cursor_move — 移动游标
SPI_scroll_cursor_fetch — 从游标中获取一些行
SPI_scroll_cursor_move — 移动游标
SPI_cursor_close — 关闭游标
SPI_keepplan — 保存一个预处理语句
SPI_saveplan — 保存一个预处理语句
SPI_register_relation — 使临时命名关系可以通过名称在 SPI 查询中使用
SPI_unregister_relation — 从注册表中删除临时命名关系
SPI_register_trigger_data — 使临时触发器数据可以在 SPI 查询中使用
45.2. 接口支持函数
SPI_fname — 确定指定列号的列名
SPI_fnumber — 确定指定列名的列号
SPI_getvalue — 返回指定列的字符串值
SPI_getbinval — 返回指定列的二进制值
SPI_gettype — 返回指定列的数据类型名称
SPI_gettypeid — 返回指定列的数据类型 OID
SPI_getrelname — 返回指定关系(表)的名称
SPI_getnspname — 返回指定关系(表)的命名空间
SPI_result_code_string — 以字符串形式返回错误代码
45.3. 内存管理
SPI_palloc — 在上层执行器上下文中分配内存
SPI_repalloc — 在上层执行器上下文中重新分配内存
SPI_pfree — 释放上层执行器上下文中的内存
SPI_copytuple — 在上层执行器上下文中创建一个行的副本
SPI_returntuple — 准备返回一个元组作为 Datum
SPI_modifytuple — 通过替换给定行的选定字段来创建一行
SPI_freetuple — 释放上层执行器上下文中分配的行
SPI_freetuptable — 释放由 SPI_execute 或类似函数创建的行集
SPI_freeplan — 释放先前保存的预处理语句
45.4. 事务管理
SPI_commit — 提交当前事务
SPI_rollback — 中止当前事务
SPI_start_transaction — 已弃用的函数
45.5. 数据变更的可见性
45.6. 示例

服务器编程接口 (SPI) 为用户自定义的C函数编写者提供了在其函数或过程内部运行SQL命令的能力。SPI是一组接口函数,用于简化对解析器、规划器和执行器的访问。SPI还进行一些内存管理。

注意

可用的过程语言提供了从函数执行 SQL 命令的各种方法。这些工具大多基于 SPI,因此本文档也可能对这些语言的用户有用。

请注意,如果通过 SPI 调用的命令失败,则控制权不会返回到您的 C 函数。相反,执行您的 C 函数的事务或子事务将被回滚。(考虑到 SPI 函数大多有文档记录的错误返回约定,这可能看起来令人惊讶。但是,这些约定仅适用于 SPI 函数本身检测到的错误。)可以通过围绕可能失败的 SPI 调用建立自己的子事务来在错误后恢复控制权。

SPI函数在成功时返回一个非负结果(通过返回的整数值或全局变量 SPI_result,如下所述)。如果出错,将返回一个负结果或 NULL

使用 SPI 的源代码文件必须包含头文件 executor/spi.h

提交更正

如果您在文档中发现任何不正确、与您使用特定功能的经验不符或需要进一步澄清的地方,请使用此表单报告文档问题。