返回介绍

I. 教程

II. SQL 语言

III. 服务器管理

IV. 客户端接口

V. 服务器端编程

VI. 参考手册

VII. 内部

VIII. 附录

章41. 服务器编程接口

发布于 2019-09-30 03:09:48 字数 2457 浏览 953 评论 0 收藏 0

目录
41.1. 接口函数
SPI_connect--把一个过程与 SPI 管理器连接起来
SPI_finish--把一个过程与 SPI 管理器断开
SPI_push--对 SPI 堆栈进行压栈操作以允许递归的 SPI 使用
SPI_pop--弹出 SPI 堆栈以允许递归的 SPI 使用
SPI_execute--执行一条命令
SPI_exec--执行一个读/写命令
SPI_prepare--为一个命令准备一个规划但不立即执行它
SPI_getargcount--返回一个 SPI_prepare 准备的已准备好规划需要的参数个数
SPI_getargtypeid--返回 SPI_prepare 准备的已准备好规划的指定参数的 typeid
SPI_is_cursor_plan--如果一个 SPI_prepare 准备的规划可以和 SPI_cursor_open 一起使用,则返回 true
SPI_execute_plan--执行一个 SPI_prepare 准备的查询规划
SPI_execp--以读/写模式执行一个准备的查询规划
SPI_cursor_open--用 SPI_prepare 创建的规划设置一个游标
SPI_cursor_find--用名字寻找并执行一个现存的游标
SPI_cursor_fetch--从一个游标里抓取一些行
SPI_cursor_move--移动一个游标
SPI_cursor_close--关闭一个游标
SPI_saveplan--保存一个规划
41.2. 接口支持函数
SPI_fname--从指定的字段编号判断字段名字
SPI_fnumber--判断声明字段名的字段编号
SPI_getvalue--返回声明字段的字符串值
SPI_getbinval--返回声明字段的二进制值
SPI_gettype--返回声明字段的数据类型名
SPI_gettypeid--返回声明字段的数据类型 OID
SPI_getrelname--返回声明关系的名字
SPI_getnspname--返回声明关系的名字空间
41.3. 内存管理
SPI_palloc--在上层执行器环境里分配内存
SPI_repalloc--在上层执行器环境里重新分配内存
SPI_pfree--在上层执行器环境里释放内存
SPI_copytuple--在上层执行者环境里制作一个行的拷贝
SPI_returntuple--准备把一个行当作 Datum 返回
SPI_modifytuple--通过替换一个给出行的选定的字段创建一行
SPI_freetuple--释放在上层执行者环境里分配的一行
SPI_freetuptable--释放一个由 SPI_execute 或者类似函数创建的行集
SPI_freeplan--释放一个前面保存的规划
41.4. 数据改变的可视性
41.5. 例子

The 服务器编程接口(SPI)给在用户定义的 C 函数里面运行 SQL 查询的能力。SPI 是一套接口函数,用于简化对分析器、规划器、优化器、执行器的访问。SPI 还进行一些内存管理的工作。

【注意】过程语言的存在也提供了其它的一些在过程里执行 SQL 命令的方法。这些语言中的大部分本身就是基于 SPI 的,因此这份文档可能会对那些语言的用户同样有帮助。

为了避免混淆,将使用"函数"(function)来代表 SPI 接口函数,用"过程"(procedure)代表用户用 SPI 定义的 C 函数。

注意,如果一条通过 SPI 调用的命令失败,那么控制不会返回到你的过程中。取而代之的是,你的过程执行所在的事务或者子事务全部回滚。这一点看起来可能很奇怪,因为大多数 SPI 函数的文档里都有错误返回习惯。不过,那些习惯只适用于在 SPI 函数自己内部检测到的错误。可以通过在你自己的可能失败的 SPI 调用周围建立一个子事务的方法来在错误之后恢复。目前还没有写这方面的文档,因为所需要的机制仍然在变化。

如果执行成功了,SPI 函数返回一个非负结果(或者通过返回一个整数值或放在全局变量 SPI_result 里,像下面描述的那样)。出错时,返回一个负数或 NULL 结果。

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文