当前位置:网站首页>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 industrial camera: explanation and configuration of color correction and code setting method
- Flir Blackfly S 工业相机:配置多个摄像头进行同步拍摄
- Data connection mode in low code platform (Part 1)
- Livox激光雷达硬件时间同步---PPS方法
- STM32F4---PWM输出
- 长安链学习笔记-证书研究之证书模式
- 遇到慢SQL该怎么办?(下)
- MetaForce原力元宇宙开发搭建丨佛萨奇2.0系统开发
- freeswitch拨打分机号源代码跟踪
- Sensor: introduction of soil moisture sensor (xh-m214) and STM32 drive code
猜你喜欢
Collection recommandée!! Quel plug - in de gestion d'état flutter est le plus fort? Regardez le classement des manons de l'île, s'il vous plaît!
强化学习如何用于医学影像?埃默里大学最新《强化学习医学影像分析》综述,阐述最新RL医学影像分析概念、应用、挑战与未来方向
张平安:加快云上数字创新,共建产业智慧生态
Introduction to microservice architecture
Twenty or thirty thousand a leaf? "Yang Mou" behind the explosion of plant consumption
The GPG keys listed for the "MySQL 8.0 community server" repository are already ins
Centros 8 installation MySQL Error: The gpg Keys listed for the "MySQL 8.0 Community Server" repository are already ins
New generation cloud native message queue (I)
组合导航:中海达iNAV2产品描述及接口描述
ROS learning (XIX) robot slam function package cartographer
随机推荐
2022/0524/bookstrap
Command injection of cisp-pte
Flir Blackfly S 工业相机:配置多个摄像头进行同步拍摄
豆瓣平均 9.x,分布式领域的 5 本神书!
centos8 用yum 安装MySQL 8.0.x
XML to map tool class xmlmaputils (tool class V)
ROS learning (25) rviz plugin
红外相机:巨哥红外MAG32产品介绍
Yyds dry goods inventory # solve the real problem of famous enterprises: maximum difference
STM32F4---PWM输出
Unicode string converted to Chinese character decodeunicode utils (tool class II)
【服务器数据恢复】raid损坏导致戴尔某型号服务器崩溃的数据恢复案例
The empirical asset pricing package (EAP) can be installed through pypi
How did partydao turn a tweet into a $200million product Dao in one year
CISP-PTE实操练习讲解(二)
1500万员工轻松管理,云原生数据库GaussDB让HR办公更高效
The mega version model of dall-e MINI has been released and is open for download
Stm32f4 --- PWM output
【论文阅读|深读】 GraphSAGE:Inductive Representation Learning on Large Graphs
Lidar: introduction and usage of ouster OS