Postgresql后端查询处理流程
2017-01-12 15:08:13 0 举报
Postgresql查询处理流程
作者其他创作
大纲/内容
返回查询结果
词法解析生成的token传给语法解析模块
接收前端发来的SQL语句(query_string)
注释
词法和语法解析部分
执行器收规划器/优化器创建的查询计划然后递归地处理它,抽取所需要的行集合。代码:
解析阶段的两个部分一个主要却别是:1)词法和语法解析部分不会查找任何系统表,而转换处理部分的语义检查才会查找系统表。2)词法和语法解析部分生成的是分析树(解析树raw parsetree),因为select查询不一定是一个有效的SQL语句,只有通过了语义从检查才是一个有效的SQL语句,所以只有在语义检查后才会产生查询树(Query)结构。
把裸分析(raw parsing)和语义分析分成两个过程的原因是系统表查找只能在一个事务中进行,而不想在一接收到查询字符串就发起一个事务。
这个阶段按照固定的词法和语法规则做词法和语法检查生成原始的解析树结构---裸解析树(raw parsetree),或者叫做语法树。代码:parsetree_list = pg_parse_query(query_string);
转换处理部分
语法解析文件gram.y,包含语法规则和对应的动作,动作代码(一般S C代码)用于建立解析树。结果词法、语法解析后,输出一个raw parsetree
解析阶段包含两部分:(1)词法、语法解析(2)转换处理
词法解析器
exec_simple_query(query_string)
语法解析器
词法解析文件为scan.l负责识别标识符和SQL关键字,对于每个标识符和关键字都会生成一个token,并传递给语法解析器
传递raw parsetree到转换处理部分
0 条评论
下一页