Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

第 45 章。服务器编程接口

目录

45.1. 接口函数
SPI_connect — 将 C 函数连接到 SPI 管理器
SPI_finish — 从 SPI 管理器断开 C 函数连接
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