Chinaunix首页 | 论坛 | 博客
  • 博客访问: 37410
  • 博文数量: 14
  • 博客积分: 452
  • 博客等级: 下士
  • 技术积分: 115
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-09 17:40
文章分类
文章存档

2011年(14)

我的朋友

分类: Mysql/postgreSQL

2011-03-30 13:05:30

本文系转载他人文章
一个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管理器。

转自
阅读(836) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~