- 浏览: 225342 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
chenxliang:
2016年10月26、27日,上海浦东,Postgres中国用 ...
PostgreSQL的用户、角色和权限管理 -
gejiod:
最近出了SQL:2011標準,希望樓主也更新下
SQL2008标准 -
lincon77:
太长了,又是E文,要是有些例子可能好理解些
SQL2003标准 -
少主丶无翼:
很谢,找了很久
SQL2003标准 -
zeeeitch:
...
PostgreSQL启动过程中的那些事七:初始化共享内存和信号二十:shmem中初始化堆同步扫描、pg子进程相关结构
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询二:SQL解析为parsetree
- 博客分类:
- PostgreSQL内核
话说 查询“ select cname, comp from test1, test2 where test1.id=test2.id; ” 发送到服务器端, 走查询分支 exec_simple_query ,先调用 start_xact_command 初始化了事务管理相关对象和资源,接着调用 pg_parse_query ,通过 Lex 和 Yacc 对传入 SQL 语句进行词法语法解析,生成解析树。
1
下面是解析 SQL 语句的调用序列图。
Postgres 服务进程简查之开始事务调用序列图
上图红色方框中显示了解析 SQL 语句的方法调用过程,在 raw_parser 方法中对 SQL 语句进行词法、语法解析并返回解析树 parsetree 的列表, 因为传入的 SQL 串(从客户端传入)可能有多个命令 。
通过 Lex 和 Yacc 对传入 SQL 语句进行词法语法解析,主要是把 SQL 语句里的目前字段、 DISTINCT 子句、 FROM 子句、 WHERE 子句、 GROUP BY 子句、 HAVING 子句、 ORDER BY 子句等解析到各自对应的结构中,组织成各自的数据结构,最后组成解析树 parsetree 。分析完后对应 SQL 语句 “ select cname, comp from test1, test2 where test1.id=test2.id; ” 的解析树结构如下图:
例子中 SQL 语句对应的解析树结构
pg 输出的解析树如下:
2011-11-23 06:57:39 HKT DETAIL:
{QUERY
:commandType 1
:querySource 0
:canSetTag true
:utilityStmt <>
:resultRelation 0
:intoClause <>
:hasAggs false
:hasWindowFuncs false
:hasSubLinks false
:hasDistinctOn false
:hasRecursive false
:hasModifyingCTE false
:hasForUpdate false
:cteList <>
:rtable (
{RTE
:alias <>
:eref
{ALIAS
:aliasname pg_type
:colnames ("typname" "typnamespace" "typowner" "typlen" "typbyval" "t
yptype" "typcategory" "typispreferred" "typisdefined" "typdelim" "typ
relid" "typelem" "typarray" "typinput" "typoutput" "typreceive" "typs
end" "typmodin" "typmodout" "typanalyze" "typalign" "typstorage" "typ
notnull" "typbasetype" "typtypmod" "typndims" "typcollation" "typdefa
ultbin" "typdefault")
}
:rtekind 0
:relid 1247
:relkind r
:inh true
:inFromCl true
:requiredPerms 2
:checkAsUser 0
:selectedCols (b 6)
:modifiedCols (b)
}
)
:jointree
{FROMEXPR
:fromlist (
{RANGETBLREF
:rtindex 1
}
)
:quals
{OPEXPR
:opno 607
:opfuncid 184
:opresulttype 16
:opretset false
:opcollid 0
:inputcollid 0
:args (
{VAR
:varno 1
:varattno -2
:vartype 26
:vartypmod -1
:varcollid 0
:varlevelsup 0
:varnoold 1
:varoattno -2
:location 57
}
{RELABELTYPE
:arg
{CONST
:consttype 23
:consttypmod -1
:constcollid 0
:constlen 4
:constbyval true
:constisnull false
:location 63
:constvalue 4 [ 19 4 0 0 ]
}
:resulttype 26
:resulttypmod -1
:resultcollid 0
:relabelformat 2
:location -1
}
)
:location 61
}
}
:targetList (
{TARGETENTRY
:expr
{FUNCEXPR
:funcid 1081
:funcresulttype 25
:funcretset false
:funcformat 0
:funccollid 100
:inputcollid 0
:args (
{VAR
:varno 1
:varattno -2
:vartype 26
:vartypmod -1
:varcollid 0
:varlevelsup 0
:varnoold 1
:varoattno -2
:location 19
}
{CONST
:consttype 23
:consttypmod -1
:constcollid 0
:constlen 4
:constbyval true
:constisnull false
:location 23
:constvalue 4 [ 34 0 0 0 ]
}
)
:location 7
}
:resno 1
:resname typname
:ressortgroupref 0
:resorigtbl 0
:resorigcol 0
:resjunk false
}
)
:returningList <>
:groupClause <>
:havingQual <>
:windowClause <>
:distinctClause <>
:sortClause <>
:limitOffset <>
:limitCount <>
:rowMarks <>
:setOperations <>
:constraintDeps <>
}
关于进行词法语法分析的 Lex 和 Yacc 请参考下面的资料,这些内容引自博客文章《一天之内不再畏惧 lex&yacc 之必备参考资料》, url 是 http://blog.sciencenet.cn/blog-419883-309595.html
- Lex and YACC primer/HOWTO http://tldp.org/HOWTO/Lex-YACC-HOWTO.html ,短短20 页,足够让你建立自信,一个上午足够了吧。
- A Compact Guide to Lex & Yacc http://epaperpress.com/lexandyacc/ , 修行再提高一步,一个下午搞定。
- 创始人写的书你得看看吧,Lex and yacc, By John R. Levine , Tony Mason, Doug Brown ,不能下载,没关系,这里有:http://www.filefront.com/16046001/lex--yacc.pdf/ ,第五章Parsing SQL 你不看一看?晚上吃完饭在教室里摆开架势三个小时敲定这短短30 页的第5 章,一气呵成,搞定。
有这三篇文档给你揣在兜里,我想你走路的时候应该“
保劲”
吧。
------------
转载请注明出处,来自博客:
blog.csdn.net/beiigang
beigang.iteye.com
发表评论
-
PostgreSQL服务过程中的那些事三:pg服务进程中的内存上下文
2012-12-31 15:07 1971题外话:年底了,就以这篇博文结束2012 ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询六:执行器执行
2012-11-07 20:13 1771话说 查询“ select c ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询五:规划成plantree
2012-10-31 20:37 1621话说 查询“ select cname, comp ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询四:分析重写成querytree
2012-10-24 19:27 1361话说 查询“ select cname, comp ... -
postgresql 小技巧
2012-10-16 19:36 1298Note : #PostgreSQL and ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询三:获取内存快照
2012-10-16 19:31 1717话说 查询“ select cname, comp ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询一:开启事务
2012-09-25 19:55 1804在《 PostgreSQL 服务过程中的那些事二: ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程一.八:加载DB基础设施,完成服务进程初始化
2012-09-18 21:02 1724话说调用 InitPostgres ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程一.七:初始化portal管理环境
2012-09-11 19:58 1586话说调用 In ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程一.六:初始化系统表缓存catcache
2012-09-04 20:51 1795话说调用 InitPostgres ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程一.五:初始化relcache管理环境
2012-08-28 20:47 1255话说调用 InitPostgres ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程三:初始化relcache管理环境
2012-08-28 20:46 0<!-- [if gte mso 9]><x ... -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询梗概
2012-08-21 21:04 1197话说客户端发起请求, pg 服务器为该请求启动一个 ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程二:建立连接完成
2012-08-13 18:50 15243 这节主要讨论 pg 服务进程 pos ... -
PostgreSQL服务过程中的那些事一:启动postgres服务进程一
2012-08-08 14:42 5627到pg 服务进程了,打算搞一个完整但简单的查询例子,从 ... -
PostgreSQL启动过程中的那些事十九:walwriter进程二
2012-08-03 16:53 13233 这节主要讨论 walwrit ... -
PostgreSQL启动过程中的那些事十九:walwriter进程一
2012-08-01 17:26 1522话说 main()->Po ... -
PostgreSQL启动过程中的那些事十八:bgwriter进程二
2012-07-27 07:25 13833 这节主要讨论 bgwr ... -
PostgreSQL启动过程中的那些事十八:bgwriter进程一
2012-07-23 20:18 1544话说 main()->Postm ... -
PostgreSQL启动过程中的那些事十六:启动进程三:CheckPointGuts刷出共享内存里所有数据
2012-07-12 16:24 1423话说启动进程调用 Startup ...
相关推荐
五、 pg_auth_members: pg_auth_members: pg_auth_members: pg_auth_members:pg_auth_members: pg_auth_members:pg_auth_members:pg_auth_members:pg_auth_members: .64 七、 pg_tablespace: pg_tablespace: pg_...
查询sql的死锁进程,查找并杀死。解决生产数据库中卡死的现象。postgresql查询死锁以及杀死死锁进程sql
SQL Server 2000链接服务器到PostgreSQL
SQL Server 2012链接服务器到PostgreSQLSQL Server 2012链接服务器到PostgreSQLSQL Server 2012链接服务器到PostgreSQLSQL Server 2012链接服务器到PostgreSQLSQL Server 2012链接服务器到PostgreSQL
pg_query_go, 使用PostgreSQL解析器解析和规范化SQL查询 pg_query_go 转到 https://github.com/lfittl/pg_query的版本。这个go库及其扩展使用实际的PostgreSQL服务器源解析SQL查询,并返回内部PostgreSQL解析树。请...
替换常量值),然后将这些规范化的查询再次解析为parsetree。 构建此扩展时,它将构建PostgreSQL服务器源代码的各个部分(请参见 ),然后将其静态链接到该扩展中。 这有点疯狂,但这是解析所有有效PostgreSQL查询...
中文手册介绍了如何使用pgAdmin维护PostgreSQL数据库。 pgAdmin支持数据库服务器7.3及以上版本。 对于低于7.3版本的请使用pgAdmin II。
walminer是PostgreSQL的wal日志解析工具,4.0版本摒弃插件模式改为bin模式,现已脱离对目标数据库的编译依赖和安装依赖,一个walminer工具可以解析PG10~PG15的WAL日志。 现已实现的功能为wal2sql、fosync、pgto。 ...
PostGresql工作中一条复杂SQL解析业务背景订单表结构实现SQLSQL解析子查询SQL:查询订单最近7天付费的用户数辅助SQL:查询连续7天的日期连接SQL:使用Left Join 连接查询连续的日期付费人数格式化SQL:付费人数为...
1.nacos服务,适配postgresql数据库。 2.提供nacos,postgresql的创建nacos数据库脚本。 3.nacos/conf/nacos-pg.sql数据库脚本文件。 4.nacos版本1.4.2。
PostgreSQL 与 MS SQLServer在过程语言中的差异
pg格式器 PostgreSQL SQL语法美化器。 注意: 该项目是一个薄包装。 模块的执行依赖于主机系统上可用的Perl。用法import { format} from 'pg-formatter' ;format ( `SELECT foo FROM bar` ) ;组态组态格式默认描述...
一、服务器进程的启动和关闭: 下面是pg_ctl命令的使用方法和常用选项,需要指出的是,该命令是postgres命令的封装体,因此在使用上比直接使用postgres更加方便。 代码如下: pg_ctl init[db] [-D DATADIR] [-s]...
NULL 博文链接:https://haige18.iteye.com/blog/1746527
PostgreSQL技术内幕:事务处理深度探索.docx
PostgreSQL中国社区资深数据库专家、沃趣科技首席数据库架构师撰写,PostgreSQL数据库领域经典著作 系统讲解PostgreSQL技术内幕,深入分析PostgreSQL特色功能,包含大量来自实际生产环境的经典案例和经验总结 ...
赠送jar包:postgresql-42.3.1.jar; 赠送原API文档:postgresql-42.3.1-javadoc.jar; 赠送源代码:postgresql-42.3.1-sources.jar; 赠送Maven依赖信息文件:postgresql-42.3.1.pom; 包含翻译后的API文档:...
postgresql的类似sqlserver的isdate方法
关于PostGreSQL中的存储过程 PostGreSQL是一个开源的数据库
嵌入式postgresql服务器为在unittests中运行postgres二进制文件提供了一种与平台无关的方法。