SPI_saveplan

Name

SPI_saveplan --  保存一个传入的规划

Synopsis

SPI_saveplan(plan)

输入

void *query

传入的规划

输出

void *

执行规划位置.如果不成功则为 NULL.

SPI_result

如果规划为 NULL 为 SPI_ERROR_ARGUMENT
如果过程未连接则返回 SPI_ERROR_UNCONNECTED

描述

SPI_saveplan 将一个 SPI_prepare 准备的规划保存在 安全的内存中,以保护它不被 SPI_finish 或者 事务管理器释放.

目前的 PostgreSQL 还没有能力在系统 表里存储已准备的规划,并且在它们执行的时候抓取它们. 这个特性将在未来的版本中实现. 一种弥补的办法是我们可以在当前会话过程中的随后的调用中 复用已准备的规划.使用 SPI_execp 执行这样的 已保存好的规划.

用法

SPI_saveplan 把一个传入的规划 (由 SPI_prepare 准备)保存到可以防止 SPI_finish 和事务管理器释放的内存中, 并且返回一个指向这个已保存规划的指针.你可以在一个本地变量中 保存这个返回的指针.不管你是在准备一个规划还是在 SPI_execp(见下文) 里使用一个已准备的规划,你都要检查该指针是否为 NULL.

注意: 如果在你的会话过程中有一个已准备规划引用的对象(一个关系,函数等等) 被删除(由你的后端或者其它进程删除),那么 SPI_execp 执行这个规划所产生的结果将不可预料.