postgresql内核分析之SQL解析(1)
2016-01-07 00:00
113 查看
摘要: 本文主要介绍postgres启动以后,SQL语句的处理流程。
基本流程
简单的函数调用,最下面为各种SQL语句的具体处理。
函数及说明
首先进入主函数PostgresMain,经过一系列初始化等准备工作以后,进入这个循环:
下面这个函数将select等SQL语句转化成命令:
firestchar其实就是一个asc码值,被下面的switch所用:
每个case对应一个命令,绝大多数的SQL进入到exec_simple_query函数进行解析
进入pg_analyze_rewrite函数,生成querytree
parser_analyze函数,解析一个parser tree,转换成Query结构
处理SELECT ... INTO into CREATE TABLE AS
处理除上述语句以外的其他SQL,包含insert,delete,update,select,explain等等。。。
3. 未完待续
基本流程
简单的函数调用,最下面为各种SQL语句的具体处理。
函数及说明
首先进入主函数PostgresMain,经过一系列初始化等准备工作以后,进入这个循环:
for (;;)
下面这个函数将select等SQL语句转化成命令:
firstchar = ReadCommand(&input_message);
firestchar其实就是一个asc码值,被下面的switch所用:
switch (firstchar)
每个case对应一个命令,绝大多数的SQL进入到exec_simple_query函数进行解析
exec_simple_query(const char *query_string)
进入pg_analyze_rewrite函数,生成querytree
querytree_list = pg_analyze_and_rewrite(parsetree, query_string,NULL, 0);
parser_analyze函数,解析一个parser tree,转换成Query结构
query = parse_analyze(parsetree, query_string, paramTypes, numParams);
处理SELECT ... INTO into CREATE TABLE AS
transformTopLevelStmt(ParseState *pstate, Node *parseTree)
处理除上述语句以外的其他SQL,包含insert,delete,update,select,explain等等。。。
transformStmt(ParseState *pstate, Node *parseTree)
3. 未完待续
相关文章推荐
- PostgreSQL新手入门教程
- PostgreSQL教程(十):性能提升技巧
- PostgreSQL教程(二):模式Schema详解
- PostgreSQL教程(十三):数据库管理详解
- 深入解读PostgreSQL中的序列及其相关函数的用法
- PostgreSQL教程(八):索引详解
- PostgreSQL教程(三):表的继承和分区表详解
- 简单介绍Ruby on Rails对PostgreSQL数组类型的支持
- PostgreSQL教程(十九):SQL语言函数
- PostgreSQL教程(四):数据类型详解
- PostgreSql新手必学入门命令小结
- 用一整天的时间安装postgreSQL NTFS权限
- FREEBSD安装POSTGRESQL笔记
- PostgreSQL8.3.3安装方法第1/2页
- 深入理解PostgreSQL的MVCC并发处理方式
- PostgreSQL教程(一):数据表详解
- PostgreSQL教程(十二):角色和权限管理介绍
- PostgreSQL教程(五):函数和操作符详解(1)
- 15个postgresql数据库实用命令分享