# 第 47 章服务器编程接口

目录

47.1.接口函数SPI_连接— 将 C 函数连接到 SPI 管理器SPI_结束— 从 SPI 管理器断开 C 函数SPI_执行— 执行命令SPI_执行— 执行读/写命令SPI_执行_扩展的— 执行带有行外参数的命令SPI_执行_和_参数— 执行带有行外参数的命令SPI_准备— 准备一个语句,但尚未执行SPI_准备_光标— 准备一个语句,但尚未执行SPI_准备_扩展的— 准备一个语句,但尚未执行SPI_准备_参数— 准备一个语句,但尚未执行SPI_获取参数— 返回由 准备的语句所需的参数数量SPI_prepareSPI_获取argtypeid— 返回数据类型 OID 为由SPI_prepareSPI_是_光标_计划- 返回真的如果声明由SPI_prepare可以与SPI_cursor_openSPI_执行_计划— 执行由SPI_prepareSPI_执行_计划_扩展的— 执行由SPI_prepareSPI_执行_计划_和_参数列表— 执行由SPI_prepareSPI_执行— 以读/写模式执行语句SPI_光标_打开— 使用创建的语句设置游标SPI_prepareSPI_光标_打开_和_参数— 使用查询和参数设置游标SPI_光标_打开_和_参数列表— 使用参数设置游标SPI_光标_解析_打开— 使用查询字符串和参数设置游标SPI_光标_找— 按名称查找现有游标SPI_光标_拿来— 从游标中获取一些行SPI_光标_移动— 移动光标SPI_滚动_光标_拿来— 从游标中获取一些行SPI_滚动_光标_移动— 移动光标SPI_光标_关闭— 关闭光标SPI_保持计划— 保存准备好的语句SPI_保存计划— 保存准备好的语句SPI_登记_关系— 在 SPI 查询中按名称提供临时命名关系SPI_注销_关系— 从注册表中删除一个短暂的命名关系SPI_登记_扳机_数据— 使临时触发数据在 SPI 查询中可用47.2.接口支持功能SPI_名称— 确定指定列号的列名SPI_fnumber— 确定指定列名的列号SPI_获取值— 返回指定列的字符串值SPI_获取binval— 返回指定列的二进制值SPI_获取类型— 返回指定列的数据类型名称SPI_获取类型ID— 返回指定列的数据类型 OIDSPI_获取名称— 返回指定关系的名称SPI_获取名称— 返回指定关系的命名空间SPI_结果_代码_细绳— 以字符串形式返回错误代码47.3.内存管理SPI_帕洛克— 在上层执行器上下文中分配内存SPI_重新分配— 在上层执行器上下文中重新分配内存SPI_pfree— 在上层执行器上下文中释放内存SPI_复制元组— 在上层执行器上下文中复制一行SPI_返回元组— 准备返回一个元组作为基准SPI_修改元组— 通过替换给定行的选定字段来创建行SPI_自由元组— 释放在上层执行器上下文中分配的行SPI_freetuptable— 释放由创建的行集SPI_执行或类似的功能SPI_自由计划— 释放之前保存的准备好的语句47.4.事务管理SPI_犯罪— 提交当前事务SPI_回滚— 中止当前事务SPI_开始_交易— 开始新的交易47.5.数据更改的可见性

47.6.例子

服务器编程接口(SPI) 使用户定义的 C 函数的编写者能够在其函数或过程中运行 SQL 命令。SPI 是一组接口函数,用于简化对解析器、规划器和执行器的访问。SPI 也做一些内存管理。

# 笔记

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

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

SPI 函数在成功时返回非负结果(通过返回的整数值或在全局变量中SPI_结果,如下所述)。错误时,否定结果或空值将被退回。

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