历史版本。 PostgreSQL 7.1 已结束支持。 请参阅 当前版本手册.
大纲
SPI_saveplan(plan)输入
- void *
query 传入的计划
输出
- void *
执行计划的位置。不成功时为 NULL。
- SPI_result
→ SPI_ERROR_ARGUMENTplan 为 NULL 时→ SPI_ERROR_UNCONNECTED过程未连接时
描述
SPI_saveplan
把由 SPI_prepare 准备的计划存储在安全内存中,使其不会被 SPI_finish 或事务管理器释放。
在当前版本的 Postgres 中,还无法把预备计划存储在系统目录中并在执行时从那里取出。这一点将在未来的版本中实现。作为替代,可以在当前会话中该过程的后续调用里复用预备计划。使用 SPI_execp 执行这个保存的计划。
用法
SPI_saveplan 把传入的计划(由
SPI_prepare 准备)保存在受保护的内存中,使其不会被 SPI_finish 和事务管理器释放,并返回指向该已保存计划的指针。可以把返回的指针保存在局部变量中。无论是准备计划时,还是在 SPI_execp 中使用已准备好的计划时(见下文),都请始终检查该指针是否为 NULL。
注意
如果预备计划所引用的对象(关系、函数等)在会话期间被删除(由你的后端或另一个进程删除),那么对该计划执行 SPI_execp
的结果将是不可预知的。