包含postgresql词法的词条
描述将sql语句提交给mysql数据库以后数据库拿到sql语句后执行流程
我了解postgreSQL的执行流程,应该和mysql是相同的:
在卧龙等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站制作、做网站 网站设计制作定制网站,公司网站建设,企业网站建设,品牌网站制作,全网整合营销推广,外贸营销网站建设,卧龙网站建设费用合理。
SQL语句在提交服务器后的流程如下:
1 进行词法分析
2进行语法分析,验证其中的属性、字段等在元数据中是否存在,并生成语法解析树
3 将语法解析树转换成逻辑执行计划
4对逻辑执行计划进行优化,得到优化后的逻辑执行计划
5根据优化后的逻辑执行计划,以及数据库中的索引等优化信息,为其中的关系代数操作符选择物理操作符和生成操作符的执行顺序,即生成查询的物理执行计划
6 将物理执行计划提交给查询执行引擎,调用物理操作符对应的函数执行查询
7 查询执行引擎将调用事务管理器、日志管理器、数据访问管理器等组件执行物理操作符的函数。
8将结果放入输出缓冲区
9返回结果数据。
如何安装并且开始调试PostgreSQL
一、去官方网站下载PostgreSQL当前最新版(当前最新版本为9.3.2)
如上图,下载红框内的Source文件。
二、除此之外还需准备Perl(当前最新为5.18.1.1800)及Flex、Bison安装包
之所以用Perl是因为我们后面安装PG主要采用的就是Perl来安装,而Flex、Bison则是PG中对命令或查询语句进行词法、语法解析所用到的,Perl的安装教程请戳这里^_^(安装到C盘也不要紧,我们可以添加系统环境变量解决),Flex、Bison下载后不用安装,至于有童鞋想知道为什么PG需要这两个东西请戳这里^_^。我们现在有Flex、Bison的包,有PG的Source Code及Perl的安装包(要安装),如下图所示:
准备好的程序
Flex_Bison文件夹中的程序
将PG及flex_bison放置于同一文件夹下即可。
三、开始安装PostgreSQL
首先要修改一个小地方,打开PG文件夹,找到MKVcbuild.pm文件(如下图所示),用文本编辑器打开(如Notepad++),修改其中my $vsVersion = DetermineVisualStudioVersion()该行,变为
my $vsVersion = “9.0.0”,至于为什么这么改,是因为不这么改,我的VS2008就无法打开,并且项目也无法编译成功,这个地方我不敢保证是不是特例还是共性,有待验证。具体如下图所示:
接下来如果Perl是安装到了C盘,则在系统环境变量中添加Perl的C盘路径位置,比如:
打开你的命令编辑器,因为我的电脑是64位的,这里我打开的是VS自带的64位命令编辑器,CMD也OK。
到MSVC目录下,输入perl build.pl DEBUID
这样就开始编译了,全过程大概需要5分钟吧,期间可能会有若干warning,但是无所谓啦,只有没有error就行,(我自己安装了两遍,有些许warning,但是绝对没有error出现)
编译结束后,就可以打开你的工程了,如下图所示
接着在命令编辑器中继续输入perl install.pl (此处为bin文件夹路径,自己指定),例如:
perl install.pl C:/bin,这样就可以将相关执行文件拷贝到你的bin目录下,将来执行的时候就可以在bin目录下执行了
执行完后,恭喜,PG就安装完成了,下面你可以简单的登陆你的PG来进行调试了
四、简单的调试
首先初始化系统数据目录(包括系统表等元数据)输入initdb.exe DB(数据目录名字,可自己指定)
其次启动服务器,输入postgreys.exe -D DB (注意-D中的D一定要大写)
再次,启动客户端(另打开一个窗口),输入psql.exe DB
最后,自己可以create
database,create table,往table中insert
into些数据,最后可以select数据等等,就可以自由操纵了,比如下例中,执行一个Select语句,通过VS2008附加到进程中去跟代码,具体研究PG的细节实现。
五、结尾
程序员的开源月刊《HelloGitHub》第 68 期
HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。
这里有实战项目、入门教程、黑 科技 、开源书籍、大厂开源项目等,涵盖多种编程语言 Python、Java、Go、C/C++、Swift...让你在短时间内感受到开源的魅力,对编程产生兴趣!
1、 toybox :该项目将 200 多个常用的 Linux 命令行工具,做成一个可执行文件。从而可以让 Android 这种原本不支持 Linux 命令的系统,也得以用上 ls、find、ps 等命令。还可以用于快速构建最小的 Linux 环境
2、 the_silver_searcher :比 ack 更快的命令行搜索工具。速度快、功能强大、使用简单,支持 Linux、Windows、macOS 操作系统,还能够整合进 Vim 和 Emacs 等编辑器
3、 WindTerm :支持 SSH/Telnet/Serial/Shell/Sftp 的终端工具。虽然该软件完全免费,但部分代码尚未完全开源,对安全敏感的同学可以再观望下
4、 wavefunctioncollapse :基于波函数坍缩 (WFC) 算法,实现的无限城市示例。城市里有房子、楼梯、树木、连接房屋的通道,你可以在城市中自由移动、跳跃、飞行,但不论你怎么移动都找不到尽头,因为这座城市会无限延伸
5、 NETworkManager :管理和解决网络问题的工具。它集成了 IP 和端口扫描、WiFi 分析器、跟踪路由、DNS 查询等工具
6、 ppsspp :能够运行在 Android 和 PC 上的开源 PSP 模拟器
7、 leocad :用来创建虚拟乐高模型的 CAD 工具。适用于 Windows、Linux 和 macOS 系统
8、 csshake :用 CSS 实现抖动效果
9、 MangoDB :真正开源的 MongoDB 替代品。它底层采用 PostgreSQL 作为存储引擎,用 Go 语言实现了 MongoDB 协议,所以几乎兼容所有的 MongoDB 库,迁移起来毫无负担。如果你用不到 MongoDB 的高级功能,还受限于它的开源协议,那么这个项目可作为 MongoDB 的开源替代方案。它才刚刚起步,建议观望一段时间或做足测试再用于生产环境
10、 caddy :用 Go 编写的轻量级 Web 服务器。它相较于 Apache、Nginx 这些知名 Web 服务器,独特点在于提供了编译好的可执行文件,实现了真正的开箱即用。无需任何配置即可拥有免费的 HTTPS、自动把 Markdown 文件转化成 HTML 等人性化的功能。如果是搭建中小型的 Web 服务,它完全够用而且省时省心
11、 croc :可以让任意两台计算机,安全方便地传输文件和文件夹的工具。轻松实现端到端加密的跨平台文件传输,还支持多文件传输、传输中断和恢复等功能
12、 jnativehook :获取键盘和鼠标事件的 Java 库。轻松监听按键、鼠标移动、点击等事件
13、 spider-flow :用流程图的方式编写爬虫的平台。无需写代码就可以快速完成一个简单的爬虫
14、 greenDAO :高性能的 Android ORM 库。拥有体积小、易于使用、支持数据库加密等特点,通过它 Android 开发者可以采用面向对象的方式操作数据库,不需要再手写和拼接 SQL 啦
15、 vue-color-avatar :纯前端实现的矢量风格头像生成网站。可以通过搭配不同的素材,生成个性化头像。该项目使用 Vite + Vue3 开发,能够帮助前端初学者熟悉 Vue3 语法并掌握项目搭建的相关知识
16、 colorfu :自动生成由文字/颜色/图片/纹理元素组成的壁纸
17、 pm2 :Node.js 的进程管理工具。它容易上手操作简单,可以有效地提高 Node.js 程序运行的稳定性,支持自动重启、负载均衡、不停服务重启、性能监控等功能,多用于生产环境中管理、监控 Node.js 进程
18、 automa :通过图形化界面拖拽功能模块,实现浏览器自动操作的扩展工具。轻松实现自动填表、截图、定时执行等操作。让浏览器自动完成预设工作流的插件,从而减少重复性操作提高效率
19、 PyWebIO :快速构建 Web 应用的 Python 工具。通过该项目你可在不写 HTML、CSS、JS 代码的前提下,仅用 Python 快速完成一个包含数据展示、表单的小型 Web 应用页面
20、 pottery :以 Python 的方式操作 Redis 的库。忘记那些 Redis 命令吧,只要你知道如何使用 Python 字典,那么你就会用这个库操作 Redis
21、 zulip :完全开源的企业级即时通讯项目。后端采用 Python 语言实现性能足够强大,功能齐全相当于开源、免费的 Slack,拥有拖拽上传文件、代码高亮、Markdown 语法、应用整合、容易接入的 API 等功能,还支持 Web、PC、iOS 和 Android 主流平台,众多知名企业都在用,能够有效地提高团队沟通和办公效率。同时该项目对新手用户友好,如果你想加入一个不错的 Python 开源项目,推荐你花时间研究下它一定会有所收获
22、 webssh :简单的 SSH 连接服务器的 Python Web 应用。该项目后端采用 Tornado Web 框架和 Python SSH 库 paramiko,前端是 TypeScript 写的命令行前端组件 Xterm.js 实现。整个项目简单还具有实用价值,可作为 Python Web 的实战项目学习
23、 django-debug-toolbar :Django 的调试工具栏。可显示当前请求和响应有关的各种调试信息,包括耗时、SQL、配置、性能等信息
24、 hyperfine :命令行基准测试工具。可用来查看和对比命令的耗时,支持多次运行的统计分析、结果导出等功能
25、 xcode-dev-cleaner :用于清理各种 Xcode 的缓存数据,释放存储空间。注意是清除 Xcode 缓存数据,不是卸载 Xcode 哈
26、 toml :更易读和易于维护的配置文件格式。如果你厌倦了 INI 的局限性、层层嵌套的 JSON 和 YAML 令人心惊胆战的缩进语法,不防给 TOML 一个机会,它支持多种数据类型、抛弃了缩进和嵌套,而且众多流行编程语言都有对应的库。TOML 已经足够成熟,绝对值得一试
27、 waka-readme-stats :自动在 GitHub 个人首页展示编程时长的工具。该项目通过 WakaTime 记录用户在 IDE 的使用时间,统计编程时长和数据,然后采用 GitHub Action 自动获取并动态更新到 GitHub 个人首页。轻而易举地展示自己的编程时长
28、 PathPlanning :常见的路径规划算法集合。项目包含了 Python 代码实现、运行过程动画以及相关论文
29、 howdy :为 Linux 系统提供人脸识别解锁电脑的工具。通过电脑内置的摄像头和红外设备,实现了类似 Windows Hello 风格的身份认证,可用于登陆、锁屏、sudo 等任何需要输入密码的地方
30、 The-Open-Book :开源的电子水墨屏阅读设备。动手能力强的同学可跟着这个项目,从焊电路板开始亲手制作出一个类 Kindle 的 4.2 英寸阅读设备
31、 fl_chart :Flutter 图表库。它支持折线图、条形图、饼图、散点图和雷达图
32、 ugo-compiler-book :《从头开发一个迷你 Go 语言》该书教你从头实现迷你 Go 语言,内容包含了词法解析、语法树构建、函数闭包、接口、CGO 的实现等内容
33、 archbase :教科书《计算机体系结构基础》第三版
34、 spring-in-action-v6-translate :《Spring 实战第 6 版》中文翻译
35、 best_AI_papers_2021 :2021 年必看的人工智能论文列表。该项目不是简单的罗列论文,它不仅包含相关论文的代码、效果展示,还有深入的文章和讲解视频。通过学习这些前沿的人工智能论文,提前了解 AI 在未来更多可能性
36、 AnimeGANv2 :可以将图片和视频转换成漫画风格的工具。采用的是神经风格迁移+生成对抗网络(GAN)的组合,转换速度快
感谢您的阅读,如果觉得内容还不错的话 求赞、求分享 ,您的每一次支持都将让 HelloGitHub 变得更好!
PostgreSQL查询SQL的语法分析(1)——词法分析
postgreSQL命令的词法分析和语法分析是由Unix工具Yacc和Lex制作的。使用的是 Bison 和
Flex。
词法分析和语法分析依赖的文件定义在src\backend\parser下的scan.l和gram.y。其中:
在raw_parser函数(在src/backend/parser/parser.c下)中,主要通过调用Lex和Yacc配合生成的base_yyparse函数来实现词法分析和语法分析的工作。
其他的重要源码文件:
辅助脚本:
SQL关键字定义及查找函数
SQL关键字列表
因为查找是采用二分查找法。如果添加关键字,需要保持name的顺序。
分享标题:包含postgresql词法的词条
分享地址:http://pwwzsj.com/article/dscspdd.html