当前位置:早雪网网络学院编程文档数据库技术Postgresql → PostgreSQL7.0手册-程序员手册 -48. 服务器编程接口

PostgreSQL7.0手册-程序员手册 -48. 服务器编程接口

减小字体 增大字体 作者:不详  来源:supcode.com收集整理  发布时间:2005-7-23 12:21:59
意,SPI_finish 将释放所有 SPITupleTable 并令所有 SPITupleTable 不可用!(参阅存储器管理). 
SPI_exec 可能返回下面的(本地)值: 
   
 SPI_ERROR_ARGUMENT 如果查询是 NULL (空)或 tcount < 0,返回此值. 
SPI_ERROR_UNCONNECTED 如果过程没有联接,返回此值. 
SPI_ERROR_COPY如果是 COPY TO/FROM stdin(标准输入),返回此值. 
SPI_ERROR_CURSOR 如果是 DECLARE/CLOSE CURSOR,FETCH,返回此值. 
SPI_ERROR_TRANSACTION 如果 BEGIN/ABORT/END,返回此值. 
SPI_ERROR_OPUNKNOWN 如果查询类型未知(不应发生这种情况),返回此值. 


算法
SPI_exec 执行下面操作: 
  
• 
断开你的过程与 SPI 管理器的连接并且释放所有你的过程自 SPI_connect 起通过 palloc 分配的存储器.这些存储器不能再利用!请参考存储器管理。 

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

SPI_prepare
名称
SPI_prepare — 将你的过程与 SPI 管理器连接. 

语法
SPI_prepare(query, nargs, argtypes)
输入
query 
查询字符串 
nargs 
输入的参数个数($1 ... $nargs -象 SQL-函数里一样) 
argtypes 
指向输入参数的类型为 OID 的指针数组 

输出
void * 
指向一个执行规划的指针(分析器+规划器+优化器) 

描述
SPI_prepare 创建和返回一个执行规划(分析器+规划器+优化器)但是不执行查询.应该只从一个已联接的过程内部调用.
用法
nargs 是参数个数($1 ... $nargs - 象 SQL-函数里一样),并且 nargs 可以是 0 --只有在查询里没有任何 $1 时是这样. 
准备好的执行规划的执行速度有时快很多,所以如果某个查询会被执行多次时这个特性可能会很有用. 

SPI_prepare 返回的规划可能只能被用于目前的过程,因为 SPI_finish 将释放为规划分配的存储器.参考 SPI_saveplan. 

如果成功,将返回一个非空的指针.否则,你会得到一个 NULL(空)的规划.不管那种情况 SPI_result 都将象 SPI_exec 返回的值那样被设置,除非它被设置为 SPI_ERROR_ARGUMENT --因为查询是 NULL 或 nargs < 0 或 nargs > 0 && argtypes 是 NULL.


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

SPI_saveplan
名称
SPI_saveplan — 保存传递进来的分析器规划 

语法
SPI_saveplan(plan)
输入
void *query 
传入的规划 

输出
void * 
执行规划定位.如果成功返回 NULL. 
SPI_result 
   
 SPI_ERROR_ARGUMENT 如果规划是 NULL,返回此值 
SPI_ERROR_UNCONNECTED 如果过程没有联接,返回此值 

描述
SPI_saveplan 把一个由 SPI_prepare 准备的规划存储在安全的存储器中,以避免被 SPI_finish 或事务管理器释放. 
目前的 Postgres 版本不能把计划好的规划存储在系统表里并从中获取它们执行.这个(特性)将在未来的版本中实现.做为可选的方法,目前的版本可以在当前会话中随后击活的过程中重新使用准备好的规划.用 SPI_execp 执行这些保存了的规划.

用法
SPI_saveplan 把一个传入的规划(由 SPI_prepare 准备)保存在存储器中防止被 SPI_finish 和事务管理器释放并且返回一个指向被保存的规划的指针.你可以把返回的指针保存在一个局部变量里.在准备一个规划或在 SPI_execp (见下面)中使用已准备的规划时,注意检查这个指针是否为 NULL(空). 
注意:如果已准备的规划参考的对象之一 (一个关系,函数,等.)在你的会话过程中被删除(被你的后端或其他过程)那么对此规划的 SPI_execp 执行结果将不可预料.

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

SPI_execp
名称
SPI_execp — 执行一个从 SPI_saveplan 来的规划 

语法
SPI_execp(plan,
values,
nulls,
tcount)
输入
void *plan 
执行规划 
Datum *values 
实际参数值 
char *nulls 
  
  
  
  

描述哪个参数获得 NULL 值的数组  
 'n' 表明允许 NULL  
' ' 表示不允许 NULL  


int tcount 
将被执行的规划的记录数 

输出
int 
返回与 SPI_exec 一样的值以及  
 SPI_ERROR_ARGUMENT 如果 plan 是 NULL 或 tcount < 0,返回此值 
SPI_ERROR_PARAM 如果 values 是 NULL 并且所准备的 plan 带有一些参数. 

SPI_tuptable 
如果成功,则象 SPI_exec 一样初始化 
SPI_processed 
如果成功,则象 SPI_exec 一样初始化 

描述
SPI_execp 把一个由 SPI_prepare 准备的规划存储在安全存储器中,以免被 SPI_finish 或事务管理器释放. 
目前的 Postgres 版本不能把计划好的规划存储在系统表里并从中获取它们执行.这个(特性)将在未来的版本中实现.做为绕开的方法,目前的版本可以在当前会话中随后击活的过程中重新使用准备好的规划.用 SPI_execp 执行这些保存了的规划.

用法
如果 nulls 是 NULL 那么 SPI_execp 假设所有值(如果有的话)都是 NOT NULL. 
注意:如果已准备的规划参考的对象之一(一个关系,函数,等.)在你的会话过程中被删除(被你的后端或其他过程)那么对此规划的 SPI_execp 执行结果将不可预料.

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

接口支持函数
所有后面描述的函数都可被联接或未联接的过程使用.

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

SPI_copytuple
名称
SPI_copytuple — 把记录的拷贝放到上层执行器环境

上一页  [1] [2] [3] [4] [5]  下一页

[数据载入中...] [返回上一页] [打 印]