暂无图片
暂无图片
暂无图片
PostgreSQL源码分析
2023-01-17 18:19:03 51829
简介:PostgreSQL数据库源码分析,实现原理分析。
开源数据库openHalo的启动过程分析
openhalo数据库是一款同时支持PostgreSQL协议和MySQL协议的开源数据库。本文分析其启动过程。在阅读文章之前,让我们先停下来思考一下,数据库怎么样才能同时支持两种协议呢?如果是你去设计,该如何去实现?除了从技术的视角看,从产品上思考,用户需要什么样的数据库?该款数据库的市场定位是什么?
chirpyli
2025-04-26
30 浏览
PostgreSQL中libpq通信协议解析
libpq是应用程序员使用PostgreSQL的C接口。libpq是一个库函数的集合,它们允许客户端程序传递查询给PostgreSQL后端服务器并且接收这些查询的结果。通俗一点,就是客户端通过libpq与数据库服务器进行交互,比如发送查询,接收查询结果。
chirpyli
2025-04-25
51 浏览
PostgreSQL数据库中Latch的实现
Latch是PostgreSQL中的一种多进程同步机制,提供休眠唤醒功能,比如,当前进程休眠指定的时间后唤醒,或者当前进程等待指定的信号后唤醒。因Latch的实现依赖底层操作系统,这里仅分析Linux操作系统的实现。有两种类型的Latch:本地Latch和共享Latch。
chirpyli
2025-04-18
78 浏览
PostgreSQL异步通知机制浅析
PostgreSQL提供了客户端和其他客户端通过数据库服务器进行消息通信的机制,即异步通知,PostgreSQL通过LISTEN和NOTIFY命令提供了异步通知。
chirpyli
2025-04-08
62 浏览
PostgreSQL插件之pg_freespacemap
PostgreSQL数据库提供了丰富的插件,很多插件可以用来分析数据库的运行情况,pgfreespacemap插件就是其中一个,它可以用来分析数据库中每个表的空闲空间情况,从而帮助DBA了解数据库的运行情况,从而进行优化。
chirpyli
2025-02-28
52 浏览
PostgreSQL源码分析——日志进程
日志模块是PostgreSQL中负责记录系统运行状态和错误信息的模块。它将系统运行过程中的关键信息记录到日志文件中,以便于系统管理员进行故障排查和性能优化。这里我们就分析一下其实现。
shengli
2024-09-05
351 浏览
PostgreSQL源码分析——auth_delay
authdelay是PostgreSQL中用于防止暴力破解密码的插件,在配置文件postgresql.conf中,authdelay参数可以设置延迟时间,单位为毫秒。其防止暴力破解的原理是,当认证失败时,会延时一段时间,然后返回认证失败。这样,攻击者就无法在短时间内尝试大量的密码,从而降低了暴力破解的成功率。
shengli
2024-08-21
131 浏览
PostgreSQL源码分析——pg_buffercache
pgbuffercache是PostgreSQL中的一个插件,通过该插件可以关注到PostgreSQL的BufferCache(缓冲区缓存)的运行情况。观察缓冲区有助于我们对数据库进行优化以及性能分析,程序调试等。比如通过分析buffercache中usagecount的情况,初步判断当前缓冲区的大小设置的是否合适等。本文将分析pgbuffercache插件的源码,以了解其实现原理。
shengli
2024-08-21
126 浏览
PostgreSQL源码分析——auto_explain
autoexplain是PostgreSQL的一个插件,用于自动记录执行时间超过指定阈值的查询的执行计划。这个功能对于优化查询性能非常有用,因为它可以帮助开发人员了解哪些查询是性能瓶颈,从而进行相应的优化。autoexplain的实现非常简单,它通过在执行查询之前和之后记录一些关键信息,然后比较这些信息来判断查询是否超过了指定的阈值。
shengli
2024-08-20
381 浏览
PostgreSQL源码分析——parser
SQL解析器主要是识别用户输入的SQL语句,并将其转化为后续优化器所需要的查询树结构。
shengli
2024-07-25
187 浏览
PostgreSQL源码分析——词法分析
数据库实现中会涉及到很多关键技术,SQL引擎、存储引擎、事务等,在SQL引擎中,第一件事就是识别用户的SQL。而识别用户SQL的第一步就是词法分析。
shengli
2024-07-24
212 浏览
PostgreSQL源码分析——对象访问控制
PostgreSQL通过基于角色的访问控制机制来管理数据库对象的访问权限。在PostgreSQL中,每个数据库对象都有一个或多个拥有者,拥有者拥有对该对象的完全控制权。PostgreSQL数据库对象包括表、视图、序列、索引、函数、存储过程等。当用户要对数据库对象进行任何操作时都必须先经过PostgreSQL的权限检查。同时,用户对象的权限发生变更时,需要对用户在对象上的操作权限进行维护和更新。
shengli
2024-07-22
145 浏览
PostgreSQL审计插件pgaudit
在PostgreSQL中,提供了开源的审计插件pgaudit,但是其功能并不完善,只提供了基本的审计功能,对此,很多基于PG开发的商业数据库大多提供了丰富的审计功能。比如人大金仓,openGauss等。这里,我们不去讨论审计功能是否丰富,我们分析一下pgaudit的实现,已便我们后续开发自己的审计插件。pgaudit.log|none指定会话审计日志记录哪些类型的语句。postgrescreaterolepgauditwithpassword'pgaudit'login;2024060114:44:52.006CST[27675]LOG:statement:insertintot1values(3,3);总体上审计插件的设计思路有点类似于日志库的设计。首先是要获取审计日志信息,需要先通过配置设置审计哪些内容,比如审计DDL语句,还是DML语句,或者都进行审计。配置好这些后,就是具体的获取审计日志的信息了。
shengli
2024-06-04
916 浏览
PostgreSQL源码分析——CREATE SERVER
我们分析一下外部数据包装器中创建外部服务器的CREATESERVER命令的实现源码。前面已经分析过很多DDL的语法实现。这里简单描述一下大致过程。
shengli
2024-03-27
316 浏览
PostgreSQL源码分析——缓冲区管理器
缓冲区是十分重要的,对数据库的性能和稳定性有着直接的影响。缓冲区是数据库SQL计算层与外部存储(磁盘)交互的关键。数据页的落盘与读取,都要经过缓冲区。PG中的缓冲区设计,考虑的很多设计点其实和应用程序中其他缓冲区的设计考虑点很多是相同的,比如缓冲区的大小,缓冲区的淘汰策略,如何提高缓冲区的命中率,这些问题很多都是缓冲区设计时需要面对的通用的问题。我们知道,实现一个缓冲区,可以用linkhashtabke,缓冲区,实际上就是一个哈希表,只不过实现的形式各有不同。BlockNumberblockNum;/blknumrelativetobeginofreln/.当数据库后端进程需要读取数据页时,会向缓冲区管理器发送一个请求,以buftag的形式请求一个数据页。上面提到了缓冲区管理器,我们看一下它是什么?缓冲区管理器包含3层:buffertable、bufferdescriptors、bufferpool。smgrread;//从磁盘读到buffer
shengli
2024-02-19
639 浏览
PostgreSQL源码分析——数据页校验
我们知道数据库是持久化存储到外存(磁盘)的,而存储介质可能损坏,数据通过IO传输时也有可能传输错误,虽然概率非常低,那么,数据库怎么应对这种情况呢?能否拥有一定的校验能力,检测出这些故障。对此有了数据库数据页校验的能力。
shengli
2024-02-06
592 浏览
PostgreSQL源码分析——外存管理
数据库最终都是持久化存储的,持久化就要将数据从内存Buffer落盘到外存。这里分析一下PostgreSQL中外存管理部分的内容。磁盘管理器不仅限于管理磁盘,实际上它支持任何社设备,只要操作系统为该设备实现了标准文件系统操作接口。虽然PG存储管理器目前仅有磁盘管理器,但依然保留了存储管理器这个中间层,以便引入其他类型的存储管理器。
shengli
2024-02-05
605 浏览
PostgreSQL源码分析——口令认证
对于数据库系统来说,其作为服务端,接受来自客户端的请求。对此,必须有对客户端的认证机制,只有通过身份认证的客户端才可以访问数据库资源,防止非法用户连接数据库。
shengli
2024-02-01
574 浏览
PostgreSQL源码分析——创建用户
创建一个用户,实际上就是向pgauthid系统表中插入一条数据,然后记录相应的权限、密码等信息。
shengli
2024-01-30
461 浏览
PostgreSQL源码分析——psql
psql是一个PostgreSQL数据库自带的客户端工具,用来与数据库进行交互,当然,你也可以用其他工具。这里,我们简单分析一下psql工具的实现。
shengli
2024-01-29
301 浏览