当前位置: 首页 > news >正文

postgres源码学习之简单sql查询

postgres源码学习之sql查询

  • sql查询的主流程
  • 读取sql
  • 解析sql
  • 重写sql
  • 获得执行计划
  • 执行查询操作
  • 结果返回

sql查询的主流程

参考postgres的处理流程
图1
由上一节,我们可以看到,当有新的连接通过权限认证之后,将进入等待接收sql语句,并执行sql语句的过程。

读取sql

建立连接后,服务端postgres就等待接收命令
图2

解析sql

解析sql语句函数为pg_parse_query,其调用栈如下:
图3

重写sql

重写sql语句函数为parse_analyze_fixedparams,其调用栈如下:
图4

获得执行计划

获得执行计划函数为pg_plan_queries,调用栈如下:
图5

执行查询操作

查询操作调用顺序为PortalRun–>PortRunSelect–>ExecutorRun–>standard_ExecutorRun–>ExecutePlan
图6

结果返回

在ExecutePlan中,会将结果集返回给客户端,调用栈如下:
图7

涉及到查询结果返回的,会调用到printtup函数。
其函数主要内容如下:

/*
	 * send the attributes of this tuple
	 */
	for (i = 0; i < natts; ++i)
	{
		PrinttupAttrInfo *thisState = myState->myinfo + i;
		Datum		attr = slot->tts_values[i];

		if (slot->tts_isnull[i])
		{
			pq_sendint32(buf, -1);
			continue;
		}

		if (thisState->typisvarlena)
			VALGRIND_CHECK_MEM_IS_DEFINED(DatumGetPointer(attr),
										  VARSIZE_ANY(attr));

		if (thisState->format == 0)
		{
			/* Text output */
			char	   *outputstr;

			outputstr = OutputFunctionCall(&thisState->finfo, attr);
			pq_sendcountedtext(buf, outputstr, strlen(outputstr));
		}
		else
		{
			/* Binary output */
			bytea	   *outputbytes;

			outputbytes = SendFunctionCall(&thisState->finfo, attr);
			pq_sendint32(buf, VARSIZE(outputbytes) - VARHDRSZ);
			pq_sendbytes(buf, VARDATA(outputbytes),
						 VARSIZE(outputbytes) - VARHDRSZ);
		}
	}

其输出形式和之前介绍的Mysql Resultset 解析记录中介绍的结果集存储有着相似的地方。

相关文章:

  • Java开发实习面试笔试题(含答案)
  • 【信息系统项目管理师】专业英语重点词汇大汇总
  • 数字电路中的焊接技术
  • MyBatis XML映射文件中的批量插入和更新
  • 模电知识点总结(2)
  • 信息安全管理体系认证:赋能组织应对数字时代的风险与挑战
  • 【含文档+PPT+源码】基于微信小程序的猎兔汽车保养维修美容服务平台的设计与实现
  • INA219电流、电压、功率测量芯片应用
  • Ollama 本地GUI客户端:为DeepSeek用户量身定制的智能模型管理与交互工具
  • 斐波那契数列模型:在动态规划的丝绸之路上追寻斐波那契的足迹(上)
  • 在VS-qt的程序中,后期增加PCH预编译功能,提高编译速度
  • 【练习】【二分】力扣热题100 34. 在排序数组中查找元素的第一个和最后一个位置
  • 蓝桥杯 Java B 组之设计 LRU 缓存
  • 【DeepSeek系列】04 DeepSeek-R1:带有冷启动的强化学习
  • 吊舱夜视与测距功能:核心技术、应用与未来展望
  • LC电路的作用是什么?
  • Conda 常用命令全解析
  • 大道至简 少字全意 易经的方式看 缓存 mybatis缓存 rendis缓存场景 案例
  • SV刷题小记2
  • TS中|和有什么区别
  • 中国—美国经贸合作对接交流会在华盛顿成功举行
  • 4月企业新发放贷款利率处于历史低位
  • MSCI中国指数5月调整:新增5只A股、1只港股
  • 汤加附近海域发生6.4级地震
  • 2025上海科技节本周六启幕,机器人和科学家同走AI科学红毯
  • 观众走入剧院空间,人艺之友一起“再造时光”