上周我在维多利亚和一位 IT 同事喝了咖啡,他对PostgreSQL 核心编程很感兴趣。“你会推荐我看哪些资源?”
那是……一个很难的问题!
PostgreSQL 是一个拥有数十年历史的庞大代码库。近 10 年来,我一直在探索边缘,并且对扩展 API、外部数据包装器、访问方法 API、一些系统目录的东西……也许是野兽表面积的 5% 感到满意?
那么,对于那些想要潜得更深的人有什么建议呢?
首先,从愿景开始,阅读“ Postgres 的设计”(Stonebraker & Rowe,1985),了解 Postgres 与其前辈的区别:复杂对象;用户可扩展性;和活跃的数据库设施;同时保留关系概念。
其次,浏览一下 Bruce Momjain 的“内部”演示。这些往往有点老,布鲁斯已经有一段时间没有做深入的核心工作了,但他是一位专业的老师和解释者,所以它们对于了解事物的形状很有用。在2018 年关于向 PostgreSQL 添加新功能的演讲中,我的同事 Stephen Frost 以类似的(也是最近的)方式介绍了代码库。
第三,考虑花一些时间阅读“ PostgreSQL 内部原理”。这是对 PostgreSQL 子系统的非常详细的介绍,包括标头结构和数据流。与任何一本书一样,它可能已经偏离了当前 PostgreSQL 的细节,但我所知道的没有其他资源甚至试图以这种粒度解释内部结构。
第四,源代码本身就是一个了不起的资源,头文件和函数描述中的注释非常好。PostgreSQL 社区令人难以置信的详细和严格的源代码审查过程不仅期望有好的代码,而且还期望有好的文档记录代码的作用。我不确定这在多大程度上可以追溯到Tom Lane(他的评论通常是完整的技术手册)的影响,但不管良好的内部文档文化是否到位,并使代码作为一个系统“平易近人”这种复杂性可能希望如此。
现在事情变得更难了。
会议演讲是一个不断变化的目标,因为他们倾向于关注事物的前沿,但有一些社区成员定期就他们的核心主题发表演讲,这必须解释事物是如何运作的,以便将事物情境化。
不幸的是,PostgreSQL 会议有一个习惯……不录音!所以网上比较少。我看过一些令人惊叹的演讲(Tom Lane 在 PgCon 2011上的多会话查询规划师大师班非常突出),但其中大部分都已经被时代遗忘了。
核心技术内容最好去的会议无疑是PgCon。
COVID 夺走了我们很多东西,但它确实使 PgCon记录并发布了许多出色的技术演讲,否则这些演讲可能永远不会出现。
以下是我总是在我的节目中标记并急于获得座位的演讲者:
- 安德烈斯·弗洛因德(Andres Freund)在完成极其艰巨的技术工作的同时,仍然抽出时间来解释他在做什么。
- 异步 IO
- 可插拔表存储
- Postgres JIT 2018
- Postgres JIT 2017
- 异步 IO
- 罗伯特哈斯,作为 EDB 首席技术官,他一直在推动真正重要的事情
- 并发 DDL
- 计划中有什么
- 并发 DDL
- Amit Kapila,每次发布都在悄悄地完成令人印象深刻的工作
- 哈希索引
- 哈希索引
- Melanie Plageman,他对真正困难的话题做出了令人瞠目结舌的解释(查询规划师的谈话让我大吃一惊)
- Postgres 规划器简介
- 工作记忆
- Postgres 规划器简介
- Peter Geoghegan,他直接进入基金会并建立起来(不幸的是,他给出的 btree 演讲,这是一次绝妙的表演,不在网上,也许这个 nbtree 演讲是一个可以接受的替代品)
- nbtree
学习 PostgreSQL 代码库是一百万步的旅程,这是肯定的。我所有有效的个人学习的共同点是实际需要。我的学习一直支持我目前需要为我的雇主完成的一些实际工作。它有动机、起点和终点。那真的很有帮助。
祝您的 PostgreSQL 之旅好运!
补充说明
因为当然我在初稿中遗漏了一些东西:
- 一旦你达到了阅读源代码的水平,你还应该阅读pgsql-hackers邮件列表的内容,以及当前的commitfest补丁。这将帮助您了解贡献文化,并了解工作正在进行的地方。
- 贡献的一个途径是补丁审查。从基本的事情开始,比如“它是否针对 main 编译”和“它是否按照作者所说的那样做”。阅读其他评论,看看其他评论者在寻找什么,重复洗涤。我仍然认为拥有自己的小补丁通过这个过程是非常宝贵的学习。对其他人的补丁进行一些审查是一种为您自己的补丁收到的评论“付出代价”的方式。
- 令人惊叹的 Oleg Bartunov 写信告诉我现在有第二本关于 PostgreSQL 内部的书,“ PostgreSQL 14 Internals。深入研究服务器机制”。目前是俄语,但现在正在进行英语转换。
原文标题:Learning PostgreSQL Internals
原文作者:Paul Ramsey
原文链接:http://blog.cleverelephant.ca/2022/10/postgresql-links.html