本文系转载他人文章
一个SQL语句从客户端发送到postgres后端服务器上是怎么被执行的呢?首先语句进入分析器进行语法分析,生成语法树(parsertree)结构,该语法树结构再进入规划器进行前期处理的重写过程(rewrite)生成查询树(querytree)结构,然后查询树进入优化器进行优化,最后送入执行器执行。
如果postgres后端(backend)进程正在处理一条plpgsql函数的语句,此时主循环已经运行到了一个执行的过程,而plpgsql函数中
又有SQL的处理,主循环不能退出到开始的状态来处理plpgsql函数中的SQL语句呀,怎么办呢?postgres提供一套接口,可以在
postgres的后端进程(backend)的内部实现第二套语法分析,规划,优化,执行的过程,这就是SPI(服务器编程接口),plpgsql就是通过SPI来实现的。
象我们要操作一个文件要先open一样,使用SPI要先调用SPI_connect进行连接,结束后要调用SPI_finish断开连接,注意这里所说的连接不是指数据库的连接,而是指在postgres程序中连接到SPI管理器。
转自
阅读(843) | 评论(0) | 转发(0) |