当前位置:网站首页>postgresql之整體查詢大致過程
postgresql之整體查詢大致過程
2022-07-07 02:20: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);
...
}
六、返回結果
具體函數還為找到
边栏推荐
- Flir Blackfly S 工业相机:自动曝光配置及代码
- 建议收藏!!Flutter状态管理插件哪家强?请看岛上码农的排行榜!
- 低代码平台中的数据连接方式(上)
- Lidar: introduction and usage of ouster OS
- 6 seconds to understand the book to the Kindle
- Word wrap when flex exceeds width
- 建議收藏!!Flutter狀態管理插件哪家强?請看島上碼農的排行榜!
- Redis configuration class redisconfig
- Livox激光雷达硬件时间同步---PPS方法
- sql中批量删除数据---实体中的集合
猜你喜欢
豆瓣平均 9.x,分布式领域的 5 本神书!
【论文阅读|深读】DNGR:Deep Neural Networks for Learning Graph Representations
[paper reading | deep reading] rolne: improving the quality of network embedding with structural role proximity
[unique] what is the [chain storage structure]?
ROS learning (XX) robot slam function package -- installation and testing of rgbdslam
1500万员工轻松管理,云原生数据库GaussDB让HR办公更高效
[unity] upgraded version · Excel data analysis, automatically create corresponding C classes, automatically create scriptableobject generation classes, and automatically serialize asset files
leetcode:5. 最长回文子串【dp + 抓着超时的尾巴】
MySQL execution process and sequence
Tiflash source code reading (IV) design and implementation analysis of tiflash DDL module
随机推荐
激光雷达:Ouster OS产品介绍及使用方法
Correct use of BigDecimal
UC伯克利助理教授Jacob Steinhardt预测AI基准性能:AI在数学等领域的进展比预想要快,但鲁棒性基准性能进展较慢
FLIR blackfly s industrial camera: synchronous shooting of multiple cameras through external trigger
#yyds干货盘点# 解决名企真题:最大差值
Date processing tool class dateutils (tool class 1)
将截断字符串或二进制数据
FLIR blackfly s usb3 industrial camera: white balance setting method
ROS learning (25) rviz plugin
[leetcode] day97 remove linked list elements
New generation cloud native message queue (I)
Flir Blackfly S 工业相机:自动曝光配置及代码
Lombok同时使⽤@Data和@Builder 的坑
2022/0524/bookstrap
Flir Blackfly S USB3 工业相机:白平衡设置方法
Blackfly S USB3工业相机:缓冲区处理
Centros 8 installation MySQL Error: The gpg Keys listed for the "MySQL 8.0 Community Server" repository are already ins
leetcode:736. Lisp 语法解析【花里胡哨 + 栈 + 状态enumaotu + slots】
Seconds understand the delay and timing function of wechat applet
解密函数计算异步任务能力之「任务的状态及生命周期管理」