Name
SPI_saveplan -- 保存一个传入的规划
Synopsis
SPI_saveplan(plan)
输出
- 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
执行这个规划所产生的结果将不可预料.