
PostgreSQL源码分析阅读笔记
文章平均质量分 89
本专栏记录笔者这半年来阅读《PostgreSQL源码分析》的月底笔记以及阅读心得,同时配合PG14.0的源码进行学习
爱弹代码的吉他手
这个作者很懒,什么都没留下…
展开
-
PostgreSQL源码安装
由于我原来安装了PG14.0,因此这里需要屏蔽该版本的所有二进制命令,这里通过重命名原来的命令文件夹的方法进行屏蔽。原创 2023-04-05 11:22:24 · 1532 阅读 · 0 评论 -
PostgreSQL源码学习笔记(8)-事务管理
前面介绍,用户的每条查询语句都是一个原子操作,但实际上数据库能够管理的最小的原子单位是事务。因此在本节中,一个逻辑意义上(SQL语句的BEGIN到COMMIT的语句)执行流程被称为“事务”,而该执行流程中的每一条语句都被称为事务(无双引号)。PG实现了事务的ACID特性,同时允许事务的嵌套特性,嵌套特性的实现关键是事务块,事务块中含有多个事务。实际上,事务块是一个有限状态机,含有执行过程中事务的状态信息。事务块以及其内部的事务组成了传统意义上的“事务”。本文主要对PG的事务管理模块进行了简单的介绍。原创 2023-03-28 16:03:47 · 1282 阅读 · 0 评论 -
PostgreSQL源码学习笔记(7)-查询执行
DDL是一种功能性语言,与普通的增删查改不同,DDL主要用于表格模式的创建修改与删除,权限的修改等 ,因此不同种类的数据定义语句,其实现会有所不同。在PG中,DDL都会通过调用函数ProcessUtility()实现。本节主要介绍该函数中会涉及的一些数据结构以及一些命令的具体执行过程。本章介绍了PG中对于SQL语句的执行过程。执行引擎将SQL语句分为两类,一类是DDL,主要由ProcessUtility模块实现;第二类是DML,主要由Executor实现。二者都被封装到一个Portal结构体当中。原创 2023-03-28 16:00:00 · 1046 阅读 · 0 评论 -
PostgreSQL源码学习笔记(6)-查询编译
当PG的后台进程Postgres接收到查询命令后,需要先将其传递到查询分析模块,进行词法,语法与语义分析。对于用户的查询命令,比如SELECT,CREATE TABLE以及一些简写的命令如"\dt",“\d”(这些简单命令会首先被转化为SELECT的语句),PG需要为其构建一颗原始解析树,然后交给查询重写模块。查询重写模块根据解析树以及一些指定参数执行解析分析以及规则重写得到查询树,最后将查询树输入到计划模块得到计划树。原创 2023-03-28 15:55:14 · 1307 阅读 · 0 评论 -
PostgreSQL-源码学习笔记(5)-索引
在数据库的使用中,常常需要查询某个字段为给定值的元组。由于PG在创建relation的时候并不会自动创建索引,这种查询常常需要遍历整个表格寻找所有匹配的元组。当表中含有的元组数据太多时,这种顺序遍历的方式不仅要扫描大量无关的元组,每次扫描都会带来大量的IO操作,搜索的效率也差强人意。而如果让数据库能够在该字段(或多个字段)维护一个索引用于快速定位目标元组,那么数据库就能够以很快的速度找到满足要求的元组,这会大大增加查询的效率。原创 2023-03-28 15:54:24 · 1469 阅读 · 0 评论 -
PostgreSQL源码学习笔记(4)-存储管理
文章目录引言(Introduction)存储管理器的体系结构存储管理器的主要任务读写元组过程外存管理元组在页面中的布局磁盘管理器VFD(Virtual File Descriptor)空闲空间映射表(Free Space Map)FSM page layoutFSM pagesAddressing可见性映射表(Visibility Mapping Table)TOAST(The Oversized-Attribute Storage Technique)Out-of-Line, On-Disk TOAST原创 2023-03-28 15:49:44 · 815 阅读 · 0 评论 -
PostgreSQL源码学习笔记(3)-进程结构
文章目录引言(Introduction)进程结构Postmaster守护进程初始化内存上下文注册信号处理函数配置参数创建监听套接字辅助进程启动装载客户端认证文件循环等待客户连接请求辅助进程SysLogger系统日志进程BgWriter后台写进程WalWriter预写式日志写进程PgArch预写式日志归档进程AutoVacuum系统自动清理进程PgStat统计数据收集进程Postgres服务进程DML执行流程参考资料(References)引言(Introduction)经过前面initdb初始化数据集簇原创 2023-03-28 15:32:49 · 907 阅读 · 0 评论 -
PostgreSQL源码学习笔记(2)-initdb数据集簇初始化
在前面一节中知道,PostgreSQL具有许多系统表与系统视图,这些资源是PostgreSQL数据库系统运行控制信息的来源,是数据库的核心组成部分。但在拷贝并编译PostgreSQL源码之后,还需要通过运行initdb命令初始化数据库。initdb命令是源码中提供的初始化数据库的二进制可运行文件,可以直接运行。初始化的步骤需要生成系统表,模板数据库和相应的目录、文件信息。本节主要介绍initdb的初始化数据集簇的过程。原创 2023-03-28 15:16:02 · 629 阅读 · 0 评论 -
PostgreSQL源码学习笔记(1)-文件结构
PostgreSQL采用C/S(Client-Server)模式,并将客户端称为前端(Frontend),服务器端称为后端(Backend)。Postgresql是一个跨平台开源且性能良好的关系型数据库,支持标准SQL,多版本并发控制等特性。本人为了增加对数据库原理的认识,特于此地进行记载。bin目录下主要包含了pgsql,initdb等各种工具的代码,而interface里面则存放PostgreSQL的C语言的库libpq。比较核心的代码是backend,bin,interface。原创 2023-03-28 15:11:01 · 656 阅读 · 0 评论