当前位置:网站首页>Processus général de requête pour PostgreSQL
Processus général de requête pour PostgreSQL
2022-07-07 02:21:00 【Happytre001】
Le client passe parpgLe processus approximatif de requête du serveur est le suivant
Un.、 Établir une connexion
Le client doit d'abord se connecterpgServeur,Après avoir établi une connexion avec le clientforkUn sous - processus traite les demandes des clients suivants,Le serveur attend ensuite la connexion du client suivant.
2.、Envoyer la demande
Le client envoie les données demandées àpgServeur,pgDemande de lecture du sous - processus.
- Le client envoie la demande
Comme la ligne de commande,Lire l'entrée de l'utilisateur,Envoyer au serveursrc/bin/psql/mainloop.c
int
MainLoop(FILE *source)
{
...
SendQuery(query_buf->data);
...
}
- Le serveur reçoit la demande
void
PostgresMain(int argc, char *argv[],
const char *dbname,
const char *username)
{
...
for (;;)
{
...
firstchar = ReadCommand(&input_message);
...
}
}
Trois、Analyse
Prenons l'exemple d'une simple requête.Le serveur a reçu une chaîne, Il faut analyser et comprendre ces données pour effectuer .
src/backend/tcop/postgres.c
static void
exec_simple_query(const char *query_string)
{
...
parsetree_list = pg_parse_query(query_string);
...
}
Analyse lexicale et grammaticale , Construire un arbre syntaxique original .
Quatre、Optimisation
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);
..
}
Convertit l'Arbre syntaxique Original en un arbre de requête , Et optimiser et réécrire l'arbre de requête , Augmenter la vitesse d'exécution .
Cinq、Mise en œuvre
static void
exec_simple_query(const char *query_string)
{
...
(void) PortalRun(portal,
FETCH_ALL,
true, /* always top level */
true,
receiver,
receiver,
&qc);
...
}
Six、Retour aux résultats
La fonction spécifique est également trouvée pour
边栏推荐
- FLIR blackfly s industrial camera: synchronous shooting of multiple cameras through external trigger
- Metaforce force meta universe development and construction - fossage 2.0 system development
- Introduction to RC oscillator and crystal oscillator
- Flir Blackfly S 工业相机:自动曝光配置及代码
- 猫猫回收站
- Recent applet development records
- postgresql之整体查询大致过程
- Halcon knowledge: segment_ contours_ XLD operator
- 猿桌派第三季开播在即,打开出海浪潮下的开发者新视野
- 传感器:DS1302时钟芯片及驱动代码
猜你喜欢
FLIR blackfly s industrial camera: configure multiple cameras for synchronous shooting
go swagger使用
ROS learning (XX) robot slam function package -- installation and testing of rgbdslam
postgresql之整体查询大致过程
String or binary data will be truncated
argo workflows源码解析
ROS learning (XIX) robot slam function package cartographer
传感器:土壤湿度传感器(XH-M214)介绍及stm32驱动代码
【论文阅读|深读】ANRL: Attributed Network Representation Learning via Deep Neural Networks
豆瓣平均 9.x,分布式领域的 5 本神书!
随机推荐
3D laser slam: time synchronization of livox lidar hardware
建议收藏!!Flutter状态管理插件哪家强?请看岛上码农的排行榜!
Halcon knowledge: segment_ contours_ XLD operator
建議收藏!!Flutter狀態管理插件哪家强?請看島上碼農的排行榜!
猫猫回收站
Introduction to microservice architecture
【论文阅读|深读】 GraphSAGE:Inductive Representation Learning on Large Graphs
猿桌派第三季开播在即,打开出海浪潮下的开发者新视野
Vingt - trois mille feuilles? "Yang mou" derrière l'explosion de la consommation végétale
Cisp-pte practice explanation (II)
Centros 8 installation MySQL Error: The gpg Keys listed for the "MySQL 8.0 Community Server" repository are already ins
Decryption function calculates "task state and lifecycle management" of asynchronous task capability
FLIR blackfly s industrial camera: synchronous shooting of multiple cameras through external trigger
Freeswitch dials extension number source code tracking
What to do when encountering slow SQL? (next)
centos8 用yum 安装MySQL 8.0.x
Recommended collection!! Which is the best flutter status management plug-in? Please look at the ranking list of yard farmers on the island!
go swagger使用
Why am I warned that the 'CMAKE_ TOOLCHAIN_ FILE' variable is not used by the project?
New generation cloud native message queue (I)