当前位置:网站首页>postgresql之整体查询大致过程
postgresql之整体查询大致过程
2022-07-06 18:39:00 【happytree001】
客户端通过pg服务器查询的大致过程如下
一、 建立连接
客户端首先需要连接上pg服务器,服务器在和客户端建立连接后fork一个子进程处理后续客户端的请求,服务器然后等待下一个客户端的连接。
二、发送请求
客户端发送请求数据给pg服务器,pg子进程读取请求。
- 客户端发送请求
比如命令行,读取用户输入,发送给服务器src/bin/psql/mainloop.c
int
MainLoop(FILE *source)
{
...
SendQuery(query_buf->data);
...
}
- 服务器接收请求
void
PostgresMain(int argc, char *argv[],
const char *dbname,
const char *username)
{
...
for (;;)
{
...
firstchar = ReadCommand(&input_message);
...
}
}
三、解析
以简单查询为例子。服务器接收到的是一串字符串,需要解析理解这个数据才能执行。
src/backend/tcop/postgres.c
static void
exec_simple_query(const char *query_string)
{
...
parsetree_list = pg_parse_query(query_string);
...
}
通过词法以及语法解析,构建一个原始的语法树。
四、优化
static void
exec_simple_query(const char *query_string)
{
...
querytree_list = pg_analyze_and_rewrite(parsetree, query_string,
NULL, 0, NULL);
plantree_list = pg_plan_queries(querytree_list, query_string,
CURSOR_OPT_PARALLEL_OK, NULL);
..
}
将原始的语法树转化为一个查询树,并且对查询树进行优化以及重写,提升执行速度。
五、执行
static void
exec_simple_query(const char *query_string)
{
...
(void) PortalRun(portal,
FETCH_ALL,
true, /* always top level */
true,
receiver,
receiver,
&qc);
...
}
六、返回结果
具体函数还为找到
边栏推荐
- GEE升级,可以实现一件run tasks
- #yyds干货盘点# 解决名企真题:最大差值
- Redis configuration class redisconfig
- The boss is quarantined
- Date processing tool class dateutils (tool class 1)
- @Before, @after, @around, @afterreturning execution sequence
- Dall-E Mini的Mega版本模型发布,已开放下载
- Redis tool class redisutil (tool class III)
- 张平安:加快云上数字创新,共建产业智慧生态
- Flir Blackfly S USB3 工业相机:白平衡设置方法
猜你喜欢
FLIR blackfly s industrial camera: auto exposure configuration and code
Blackfly S USB3工业相机:缓冲区处理
Flir Blackfly S USB3 工业相机:计数器和定时器的使用方法
Analyze "C language" [advanced] paid knowledge [II]
红外相机:巨哥红外MAG32产品介绍
The boss is quarantined
leetcode:5. 最长回文子串【dp + 抓着超时的尾巴】
张平安:加快云上数字创新,共建产业智慧生态
Livox激光雷达硬件时间同步---PPS方法
Flir Blackfly S USB3 工业相机:白平衡设置方法
随机推荐
The last line of defense of cloud primary mixing department: node waterline design
Time synchronization of livox lidar hardware -- PPS method
低代码平台中的数据连接方式(上)
The foreground downloads network pictures without background processing
UC伯克利助理教授Jacob Steinhardt预测AI基准性能:AI在数学等领域的进展比预想要快,但鲁棒性基准性能进展较慢
1500万员工轻松管理,云原生数据库GaussDB让HR办公更高效
PartyDAO如何在1年内把一篇推文变成了2亿美金的产品DAO
Schedulx v1.4.0 and SaaS versions are released, and you can experience the advanced functions of cost reduction and efficiency increase for free!
Metaforce force meta universe development and construction - fossage 2.0 system development
开发中对集合里面的数据根据属性进行合并数量时犯的错误
【论文阅读|深读】 GraphSAGE:Inductive Representation Learning on Large Graphs
建議收藏!!Flutter狀態管理插件哪家强?請看島上碼農的排行榜!
Recent applet development records
Flir Blackfly S 工业相机:通过外部触发实现多摄像头同步拍摄
2022/0524/bookstrap
张平安:加快云上数字创新,共建产业智慧生态
【论文阅读|深读】ANRL: Attributed Network Representation Learning via Deep Neural Networks
Redis configuration class redisconfig
FLIR blackfly s usb3 industrial camera: white balance setting method
FLIR blackfly s usb3 industrial camera: how to use counters and timers