初始化部分(Initialization)


bootstrap:和系统表相关。

main:传递参数到后台的pg进程。

postmaster:控制pg服务开关,创建共享内存,循环等待连接并分配服务。

libpq:与子进程通讯相关的库。

查询部分(Main Query Flow)


tcop:交警,分配请求到对应模块如解析器、优化器、执行器和命令行功能。

parser:把sql语句转化成查询执行树。

rewrite:规则和视图支持部分。

optimizer:优化查询路径生成计划。

optimizer_path:生成所有可能的路径,检查表连接顺序,where条件限制,优化表的统计信息,对于可执行的计划评估开销。

optimizer_geqo:遗传(或者是祖传?)查询优化器评估的路径对于要连接的表,当表的数量很少时会给很优化的结果,表太大就直接给一个一般的,可以通过参数控制是否使用这个功能。      

optimizer_plan:拿着“optimizer_path”的结果输出最小开销的路径。

optimizer_prep:处理特殊的查询计划。

optimizer_util:优化支持部分。

executor执行复杂的计划包括,增删改查。算子举例:堆扫描、索引扫描、排序、连接、聚合、分组、去重等。

指令支持(Command Support)


commands:响应指令,以及简单的功能如vacuum、create table直接在元数据(catalog)上面做了。

catalog:元数据,直接操作系统表和目录,如索引、表、存储过程、操作符等。

access:大量的数据访问函数,如索引访问、堆访问、和事务日志。

access_common:通用访问方法。

access_gin:索引相关访问。

access_gist:搜索树相关访问。

access_hash:哈希相关访问方法。

access_heap:存储数据行。

access_index:被索引类型使用。

access_nbtree:Lehman和Yao的B树管理算法。

access_spgist:空间分片的全局特征信息相关访问。(GiST)

access_transam:事务管理,如日志读写。(BEGIN/ABORT/COMMIT)

nodes:关于SQL查询的创建或者操作叫做节点,节点一般都有类型和特殊的数据结构,节点间经常被放在链表里。

storage:管理大量存储系统,提供统一后台访问。

storage_buffer:共享缓存管理。

storage_file:文件管理。

storage_freespace:剩余空间映射表。

storage_ipc:信号量和共享内存。

storage_large_object:超大对象。

storage_lmgr:锁管理。

storage_page:页管理。

storage_smgr:磁盘和存储设备管理。

utils:工具类。

utils_adt:包含所有PG中內建数据类型(如bool、char、date)。

utils_cache:因为PG支持很多随意数据类型,后台系统需要查询一个系统表关于这些随意类型时会先走这个缓存。

utils_error:错误反馈,从后端反馈到前端去。

utils_fmgr:函数管理,处理动态绑定的函数调用,和系统表中定义的函数调用。

utils_hash:哈希函数管理,被缓存和内存管理器使用以做快速查询动态数据存储结构。

utils_init:大量初始化。

utils_mb:单字节和多字节的编码。

utils_misc:冗余的东西(官方叫miscellaneous stuff)

utils_mmgr:内存管理(PG进程本地)。

utils_resowner:资源拥有者追溯。

utils_sort:排序工具,如对元祖排序。

utils_time:事务时间,与mvcc有关,判断一个元祖是过期了还是未提交。

基础支持(Support Facilities)


include:引用的文件。

lib:支持的库,大致看了下有二插堆,布隆过滤器。

port:兼容性部分。

regex:正则表达式。

snowball:语法库,雪球是一个语法库,各国语言的规范都有。

replication:通过日志迁移支持流式备份。

tsearch:文本查询库用于支持全文查询。

翻译自 (https://wiki.postgresql.org/wiki/Backend_flowchart)

转载于:https://www.cnblogs.com/zhejiangxiaomai/p/10653693.html

小麦带你看postgres(代码模块结构)相关推荐

  1. php大马编写,带你走进php大马的结构模块编写之路

    本帖最后由 xoanHn 于 2017-11-13 11:56 编辑 带你走进php大马的结构模块编写之路 本文原创作者:Laimooc(原名xoanHn),个人站点:www.laimooc.cn . ...

  2. 51ak带你看MYSQL5.7源码2:编译现有的代码

    从事DBA工作多年 MYSQL源码也是头一次接触 尝试记录下自己看MYSQL5.7源码的历程 申明:个人Python编程很溜,但是C++还停在白痴水平,源码理解方面有点弱,如发现有错误的地方,轻喷 目 ...

  3. sql+php修改mysql结构,MSSQL_修改SQL-SERVER数据库表结构的SQL命令附sql命令行修改数据库,具体不废话了,请看下文代码 - phpStudy...

    修改SQL-SERVER数据库表结构的SQL命令附sql命令行修改数据库 具体不废话了,请看下文代码详细说明吧. 向表中增加一个 varchar 列: ALTER TABLE distributors ...

  4. 【 全干货 】5 分钟带你看懂 Docker !

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者丨唐文广:腾讯工程师,负责无线研发部地图测试. 导语:Docker,近两年才流行起来的超轻量级虚拟机,它可以让你轻松完成持续集成.自动交付 ...

  5. ML之XGBoost:XGBoost参数调优的优秀外文翻译—《XGBoost中的参数调优完整指南(带python中的代码)》(二)

    ML之XGBoost:XGBoost参数调优的优秀外文翻译-<XGBoost中的参数调优完整指南(带python中的代码)>(二) 目录 2. xgboost参数/XGBoost Para ...

  6. 毕业生的商业软件开发之路 --- C#基本语法-C#代码模块逻辑框架

    C#基本语法 课程介绍 面向读者说明C#编程语言的基本语法,本章要求阅读者已经掌握了一种计算机高级编程语言,比如VB或C++等,理解变量.数组.条件判断.循环等编程知识.达到了国家计算机等级考试二级的 ...

  7. 太好了,一分钟带你分清Python的模块、库、包有什么联系和区别?

    Python的流行主要依赖于其有众多功能强大的库(Library),Python自带的标准库(Standard Library)可以满足大多数的基础需求,除了函数库以外,模块(Module)和包(Pa ...

  8. 【 全干货 】5 分钟带你看懂 Docker ! 1

    作者丨唐文广:腾讯工程师,负责无线研发部地图测试. 导语:Docker,近两年才流行起来的超轻量级虚拟机,它可以让你轻松完成持续集成.自动交付.自动部署,并且实现开发环境.测试环境.运维环境三方环境的 ...

  9. 【全干货】5分钟带你看懂 Docker!

    作者丨唐文广:腾讯工程师,负责无线研发部地图测试. 导语:Docker,近两年才流行起来的超轻量级虚拟机,它可以让你轻松完成持续集成.自动交付.自动部署,并且实现开发环境.测试环境.运维环境三方环境的 ...

最新文章

  1. 防火墙安装的十步骤,加强网络第一道保护屏
  2. 2017年秋季个人阅读计划
  3. mysql server 5.6root_root密码mysqlMySQL-5.6.24免安装版配置方法
  4. Windows 恢复环境(Windows RE模式)
  5. 橡胶支座抗压弹性模量计算公式_隔震支座的这些力学特性您都掌握了吗?
  6. !!统计字符(处理字符串)(getline函数使用)
  7. AI 对不起 我还爱着你
  8. python 闯关之路二(模块的应用)
  9. QLabel控件功能示例
  10. 今生梦一场,思念你的殇
  11. 动名词做主语时的谓语动词问题
  12. 网易云音乐接入微信状态
  13. NRF52840 SOC 在空气净化市场应用的发展趋势
  14. 使用jsoup入门java爬虫 案例
  15. c语言编程实现dsa算法,椭圆曲线加密算法的C语言实现.doc
  16. 移动二班 21号 pycharm 04.09
  17. SQL Server 2012 SP1 企业版
  18. React生命周期解析
  19. webots(webot社群助手)
  20. BUUCTF【axb_2019_fmt32】

热门文章

  1. oracle层次查询用处,Oracle描述层次查询(hierarchicalquery)
  2. 无监督学习与有监督学习的本质区别是什么_人工智能中的无监督学习
  3. 码云nacos下载_nacos安装,配置以及持久化
  4. php extension loaded,php中extension_loaded()函数的使用详解
  5. 卡片使用_APP必备的设计元素!卡片
  6. java 详解 搭建 框架_maven 基本框架搭建详解
  7. matlab 坐标轴中心,matlab中怎么将坐标轴改为经纬度坐标轴
  8. 用java代码实现Singleton,为什么在Java代码中实现Singleton模式(有时被认为是Java世界中的反模式)?...
  9. python统计linux流量,通过Python进行MySQL表信息统计
  10. myeclipse搭建php,MyEclipse常用配置图文教程