PostgreSQL 是一款卓越的开源数据库。积极参与社区讨论并提供功能或问题的解决方案,不仅能丰富 PostgreSQL 的能力,还能提升个人的技术水平和视野。
在提交patch之前,首先需要了解以下内容:
- 如何下载和编译源码
- 如何运行测试
- 如何构建文档
- 如何格式化代码
- 如何构建布丁
- 如何提交布丁
下载和编译源码
git clone -b master https://git.postgresql.org/git/postgresql.git
cd postgresql/
./configure --prefix=/home/postgres/pgdb --enable-tap-tests --enable-cassert --enable-debug
make world
make check-world
注意:在更改头文件后,需要运行 make distclean。
如果是新增功能的话,通常使用master分支。如果是提交错误修复,则需要找到对应的分支。
PostgreSQL现在使用meson和makefile两套编译方法。如果新增文件后,需要在makefile或者meson.build加入新文件。
编写和运行测试脚本
PostgreSQL主要的测试方法有两种:
- SQL 结果对比测试:执行 SQL 后,对比预期结果和实际结果(可参考 )。
- Perl 脚本测试:使用 Perl 脚本测试流程是否符合预期(需启用 ,可参考 )。
建议:在提交前,构建较为丰富的测试脚本,这不仅可以为社区提供测试方案,还能保证代码的健壮性。可以考虑启用 --enable-coverage 来查看测试脚本对代码的覆盖率,确保测试的全面性。此外,可以启用 --enable-injection-points,通过故障注入来覆盖通常无法到达的系统调用部分。
构建文档
在 doc/src/sgml/ 的相应位置添加功能的使用文档,包括功能介绍、使用方法和效果等。
格式化代码
通过运行 make stylecheck 对代码进行格式化。需要注意的细节包括:
- 使用 TAB 来增加缩进;
- 将新增的类型加入到 typelist 中;
- 其他;
构建布丁
通过以下命令生成补丁文件,并作为附件提供给社区:
git format-patch -1 -v1 <commit_id>
# 1 = patch depth,表示要包含的最顶端补丁数量。
# v1 = patch version,每次向同一主题发送更新的补丁时,需要更新版本号。
注意:社区面向所有平台,如果功能存在平台限制,建议使用 #ifdef 或以插件形式控制代码在特定平台上的生效。
提交布丁
建议参与社区建设的同学首先要在PostgreSQL社区官网建立账号,并订阅邮件列表,比较重要的邮件里表有pgsql-bugs,pgsql-hackers,具体可参见https://www.postgresql.org/list/。
一般新功能都会向pgsql-hackers发送邮件。
提交补丁后,打开https://commitfest.postgresql.org/,点击Create a new commitfest entry构建你的提交信息,并且更改状态,例如Needs review。当建立好提交信息后,可以在http://cfbot.cputube.org/查看你的patch是否正常通过了测试。
提高社区接受补丁的几率
- 从简单的事情开始,比如多在社区协助测试,review代码;
- 补丁越小,被接受的可能性越大;
- 仔细倾听对你补丁的反馈;
- 始终保持礼貌(包括:永远不要讽刺、挑衅等……);
- 并非所有补丁都会被接受,不要往心里去;
- 不要过多的催促,大多数人是在业余时间参与开源工作;
- 对于我们这些英语是第二语言的人来说,Grammarly 是一个很大的帮助或者通过AI来优化你的文本;




