你想成为一名开发人员吗?
作者:Selena Deckelmann
这份文档是为那些希望为 PostgreSQL 做贡献的新手开发人员准备的,他们对如何开始或“正确的方式”参与感到困惑。 欢迎提供反馈,以及指向重要文档、示例、教程和关于为项目做贡献的个人故事的额外链接。
我们还有 开发者常见问题解答
如何开始
概述
为核心 PostgreSQL 做贡献需要一些基本开发工具 - git、C 开发环境和 perl。 大多数现代 Linux 和 BSD 操作系统都带有可用于开发需求的“-devel”软件包。 在非常高的层面上,您将
- 安装并使用基本工具(git、C 开发环境和 perl)
- 克隆我们的 git 源代码仓库
- 编译 PostgreSQL 并成功运行回归测试套件
现在,您应该准备好开始编写代码了!
源代码
源代码可以在 http://git.postgresql.org/gitweb?p=postgresql.git;a=summary 找到
安装完 git 后,您可以使用以下命令在本地检出此代码
git clone https://git.postgresql.org/git/postgresql.git
虽然有可用的发行版压缩包,但您应该使用 git clone 与社区一起在代码上工作。
黑客 PostgreSQL 资源
网上有几个关于如何实际黑客 PostgreSQL 的资源; 这些只是一些
Neil Conway 和 Gavin Sherry 的原始“黑客 PostgreSQL 简介”: http://www.neilconway.org/talks/hacking/ ; 在 PgCon 2007 上发表 (http://www.pgcon.org/2007/schedule/events/8.en.html) 以及 PostgreSQL 10 周年纪念峰会
Stephen Frost 的 2013 年 PgCon 演讲“黑客 PostgreSQL” (http://www.pgcon.org/2013/schedule/events/545.en.html) 幻灯片在这里: http://snowman.net/~sfrost/hackingpg-pgcon13_20130506.pdf 以及他 2011 年 PgCon 演讲“补丁审查回顾” (http://www.pgcon.org/2011/schedule/events/368.en.html) 幻灯片在这里: http://www.pgcon.org/2011/schedule/attachments/189_pg_patch_review_20110516.odp
Andrew Dunstan 的“如何成为快乐的黑客”,视频在这里: http://www.youtube.com/watch?v=yFDyM29tB6k
Fabrízio Mello 和 Dickson Guedes 的“黑客 PostgreSQL” YouTube 频道 (PT-BR): https://www.youtube.com/channel/UCjq4gJg4tYy0NqEEo3t60IA
风格指南
使用我们的源代码涉及一些通用的规则。 这些记录在我们的核心文档中: https://postgresql.ac.cn/docs/current/static/source.html
在较高的层面上,我们使用 4 个空格的制表符缩进,严格的 ANSI C 注释格式,我们的变量和函数命名约定是匹配周围的代码。 例如,如果您看到变量使用驼峰式大小写,请匹配它。 如果它们使用下划线,或者小写,请匹配它。 在代码部分内的可读性和一致性比普遍一致性更重要。 如果一段代码正在被大幅重写,开发人员有时会重写私有函数名称和变量名称以匹配当前约定。 但是,仅为了重命名变量而将它们重命名以匹配当前的编码风格概念的项目将被拒绝。
错误修复
错误发布到邮件列表:[email protected]
您可以在以下位置看到已报告错误的存档: https://postgresql.ac.cn/list/pgsql-bugs/
通常,错误是通过我们的 错误报告表格 发布的,然后该列表的成员做出回应。 当然,并非发布到此列表中的每个问题都是错误。 了解此过程工作原理的一个好方法是订阅该列表并观察一段时间,然后再加入。 我们的软件非常复杂,开发工作跨越了数十年。 有了这样的历史,许多变化和想法已经被提出、尝试、失败和成功。 如果您的最初想法被拒绝、被大幅重构或长期贡献者对想法或代码提供关键反馈,请不要灰心。 如果贡献者正在回应,很可能是他们在试图为您的工作提供方向,并建议您尝试不同的方法,而不是放弃。
错误报告的另一个来源是 [email protected] 邮件列表。 订阅并回复发布到此列表中的问题是熟悉 PostgreSQL 日常用户面临的常见问题的一个好方法。 我们开发社区的许多成员都在此列表中,并定期回复用户问题。 阅读档案并尝试在问题出现时做出回应是对我们社区的重要而有用的贡献。
一般来说,错误修复会在可能的情况下回溯到受影响的分支。
待办事项
值得检查您感兴趣的功能是否在我们的维基上的待办事项列表中: https://wiki.postgresql.ac.cn/wiki/TODO.
那里的条目通常包含有关该功能的更多信息,并可能指明为什么它尚未实现。 我们尝试组织问题并链接到我们邮件列表档案中的相关讨论。 请在尝试解决 TODO 之前阅读背景信息。 如果没有背景信息,可以向 [email protected] 发布问题并请求更多信息,并询问有关任何正在进行的解决问题工作的状态。
搜索 PostgreSQL 档案
启动项目应该始终从搜索我们的 PostgreSQL 邮件列表档案开始。 您可以从这里开始: https://postgresql.ac.cn/list/pgsql-hackers/.
我们项目的政策是在尽可能公开地讨论正在进行的代码工作,包括任何正在进行的补丁。 您可能会在我们的档案中找到重要且有用的但未提交的代码,这些代码可以帮助您了解当前或过去的工作,或者减少完成任务所需的工作量。 还有一些对我们核心项目的变化被拒绝了,但它们是对问题的完全合理的解决方案。 底线; 搜索我们的档案是任何社区成员必须学习的成为有效成员的关键技能。
全新的功能
如果您对 PostgreSQL 有一个全新的想法,并且您已经查看了我们的档案、扫描了待办事项列表并查看了与您要进行的更改相关的代码,那么现在是深入 [email protected] 邮件列表的时候了。
这是一个非常活跃的列表 - 每天发布 20-100 或更多条消息。 如果您正在进行一个项目,建议您至少在项目持续时间内订阅邮件列表。 该列表非常大,由过去 15 年开发工作中的贡献者和观察者组成。
Bruce Momjian 创建了一个关于如何让您的补丁被 PostgreSQL 社区接受的演示文稿: http://momjian.us/main/writings/pgsql/patch.pdf
您在邮件列表中发布新项目的初始帖子应包括
- 要解决的问题或要实现的功能的描述。
- 指向相关标准文档的链接。
- 对要修改的源代码区域的简要描述。
- 实现的预期时间表。
- 指向 PostgreSQL 邮件列表中关于该问题或功能的相关先前讨论的链接。
- 将您将在项目中直接合作的任何开发社区成员 CC 进来。
- 指向 wiki.postgresql.org 上的维基页面,以获取正在进行的状态更新。
您在实现新功能时获得成功的最佳机会是在开发社区成员的早期参与。 在 pgsql-hackers 邮件列表上启动有关功能的对话并公开请求过去在相关或类似功能上工作过的开发人员的反馈是完全适当且必要的。 我们鼓励这种沟通,并且大多数活跃的开发人员都愿意并且有兴趣公开地为您承担的工作提供指导。
新功能始终提交到“master”(git 存储库中的开发分支)。 项目的政策是不要在已发布的主要版本中添加功能。
Commitfest 和时间安排
Commitfest 过程旨在跟踪传入的补丁,帮助同步开发和提交工作,使审查过程更加明显和透明,并鼓励新人参与 PostgreSQL 的开发。
开发人员需要将补丁提交到 [email protected] 邮件列表,然后才会进行审查。 一旦包含补丁的电子邮件在 postgresql.org 网站上被存档,该补丁就可以链接到 Commitfest 应用程序 (https://commitfest.postgresql.org) 中。 Commitfest 定于每月 15 日开始,大约每两个月举行一次。 自创建该流程以来,我们每年大约举办了五次 Commitfest。
并非所有补丁都需要经过 Commitfest 过程,尽管大多数规模较大或需要详细代码审查的补丁都需要。
在过去几年中,将重大功能添加到主要点版本通常需要在 7 月到 12 月之间将补丁提交到审查队列。功能冻结可能发生在 2 月,并且在新的主要版本完成之前不会接受新功能。(有关此内容的描述和评论,请访问:http://rhaas.blogspot.com/2010/07/concurrent-development.html)。
有关 Commitfests 的更多信息,请访问:https://wiki.postgresql.ac.cn/wiki/CommitFest
参与开发社区
有关邮件列表的信息,请访问 邮件列表 页面,这里也为方便您复制了相关内容。
邮件列表文化
PostgreSQL 社区遍布全球,通过我们的邮件列表进行交流。当您深入了解我们的社区时,您会遇到拥有各种数据库、软件开发和系统管理专业知识的人。邮件列表上会免费提供优质的技术和专业建议,但我们无法保证或期望任何人能解决任何特定问题。在我们的邮件列表、IRC 或与 postgresql.org 网站相关的论坛上,禁止发布辱骂性言论或人身攻击。
最重要的是,PostgreSQL 社区期望每个人尊重彼此,并在遇到简短或批评性语言时,给予彼此信任。健壮性原则适用于参与我们的社区:在发送信息时要谨慎;在接受信息时要宽容。
也就是说,我们的社区以其积极和技术性的讨论风格而闻名。对于不熟悉我们社区的人来说,我们的讨论可能听起来像是在侮辱或过度批评。请记住,作为一名新的贡献者,您正在接触一种新的文化。每种文化都有不同的行为准则、社会规范和期望。就像学习一门外语或访问一个陌生的国家一样,您加入 PostgreSQL 社区时的体验无疑会包含一个“调整周期”。这可能包括高潮和低谷,友好的或不友好的时刻。
与任何遇到陌生文化的经历一样,您需要花些时间来熟悉它。花更多时间清晰地沟通。如果您感到困惑或无法理解回复,请要求澄清。注意避免人身攻击,即使有人犯了错误。如果有一个普遍的常识,那就是每个人都会犯错。
请记住,我们是一个学习型社区,除了少数例外,人们交流的目的是学习、分享和完善想法。
电子邮件礼仪机制
包含“保密通知”的签名在 PostgreSQL 邮件列表的上下文中毫无用处。我们列表中的所有信息都会公开存档,并在全球范围内立即公开,并且不会从我们的档案中删除。请从您发送到我们列表的电子邮件中删除这些通知,特别是在发布您希望贡献或与我们社区分享的代码时。
在回复时,请保持尊重并使用适当的引用。请参阅 邮件列表礼仪常见问题解答,详细了解在回复邮件列表时什么是适当的引用。
我们的邮件列表通常设置为“回复发件人”,但参与主题的最佳方式是“回复所有人”。这意味着您将在回复中同时包含发件人的电子邮件地址和邮件列表。此外,请勿向邮件列表发送包含 HTML 格式的电子邮件。
最后,我们的社区通常不会在回复邮件列表主题时“顶帖”(请参阅 维基百科:顶帖,了解顶帖的定义)。
使用讨论列表
您可以直接发送电子邮件到任何邮件列表,无需先订阅。您收到的或发送的任何回复都应发送到列表以及 CC 对应者。
如果您希望接收发送到列表的邮件流量,您可以使用 订阅 表单加入。您应该收到来自处理这些列表的邮件列表管理器软件的回复电子邮件。如果您希望更改与订阅相关的各种设置或取消订阅,您可以使用 网络 界面进行操作。
如果您通过网络界面而不是订阅来跟踪讨论,您会在某个时候希望回复发送到列表的消息。请勿简单地复制消息正文并将其粘贴到具有类似主题的消息中作为加入对话的方式。邮件列表依赖于“In-Reply-To”邮件头将单个消息与其主题关联起来。如果您不知道如何手动添加此标题,您应该改为使用每个消息视图中提供的“原始”链接 提供,将消息下载为文件(mbox 格式),然后将其导入到您喜欢的电子邮件客户端,并使用通常的“回复所有人”方式回复邮件列表消息。
讨论列表概述
我们有两个主要列表与 postgresql 的使用和开发相关:[email protected] 和 [email protected]。如果您在 PostgreSQL 安装中遇到问题、需要安装帮助、是使用 PostgreSQL 的软件开发人员或对该项目有普遍性问题,则 pgsql-general 是正确的起点。如果您要提交补丁、想进一步了解如何开发 PostgreSQL 本身,或对数据库内部结构感兴趣,则 pgsql-hackers 是正确的地方。我们还有 [email protected] 列表,如果您想尝试在较小的列表中发布问题,并且该列表中的人员专门负责回答非常基本的问题。
如果您主要对性能调优、基准测试或来自现有用户关于性能的案例研究感兴趣,则 [email protected] 是一个很好的加入列表。
如果您有兴趣为网站维护或编辑做出贡献,或对 PostgreSQL 基础设施进行系统管理,请加入 [email protected] 邮件列表。
如果您要为 PostgreSQL 文档做出贡献,请加入 [email protected] 邮件列表。文档始终需要文字编辑、测试人员和示例生成。
如果您有兴趣在会议上担任展位人员、在会议上发表演讲、创建用户组或参与用户组,请加入 [email protected] 邮件列表。我们始终需要展位志愿者、演讲者、案例研究撰稿人和博主。
如果您认为在 PostgreSQL 中发现了一个错误,并且您不熟悉我们的项目,我们建议您首先在 pgsql-general 列表中询问,然后阅读我们的 错误提交指南,然后访问我们的 错误报告表单。
我们还有用户组邮件列表、特定语言列表以及一些其他具有自己社区的特定项目。您可以在以下位置找到这些列表的综合列表:https://postgresql.ac.cn/community/lists/
Wiki
我们的 wiki 非常活跃,并且经常更新,请访问:https://wiki.postgresql.ac.cn。我们鼓励贡献者添加相关内容,并纠正发现的任何错误。
有数百个项目依赖于、与 PostgreSQL 相关或扩展 PostgreSQL。您可以在 外部项目 文档页面、PGXN 或 软件目录 中找到这些项目的列表。这些项目是用多种语言编写的,由国际团队支持,通常很有趣。花一些时间探索围绕 PostgreSQL 的项目生态系统,以便更好地了解我们的数据库在全球范围内的各种使用方式和范围。
我们关于公开对话/代码的理念
PostgreSQL 项目认为,公开代码审查是实现我们出色代码质量的方式。因此,PostgreSQL 的补丁必须在公开讨论并提交,并且所有补丁都将在公开审查。该策略的一个例外是,安全漏洞可能会在发布修复程序之前披露给私人邮件列表,以帮助防止利用漏洞的用户。
与之相关的是,有关代码、设计决策和用户体验的对话在邮件列表中进行。我们尝试将所有项目对话引导到邮件列表,以便记录决策背后的思考过程,并让所有参与者和观察者从这些对话中学习。
有关为 PostgreSQL 做出贡献的资源
- 提交补丁:https://wiki.postgresql.ac.cn/wiki/Submitting_a_Patch
- Greg Smith,使用用户定义函数公开 PostgreSQL 内部结构 http://www.pgcon.org/2010/schedule/attachments/142_HackingWithUDFs.pdf
- Josh Berkus,50 种热爱您的项目的方式 http://www.slideshare.net/PGExperts/50-ways-to-love-your-project
- Laetitia Avrot,破除为 PostgreSQL 做出贡献的神秘感 https://www.slideshare.net/LtitiaAvrot/demystifying-contributing-to-postgresql
- Melanie Plageman,让您的补丁更容易提交 - https://speakerdeck.com/melanieplageman/making-your-patch-more-committable
- Michael Paquier,PostgreSQL 黑客技巧 - https://www.postgresql.eu/events/pgconfeu2023/sessions/session/4859/slides/399/PGConfEU2023_PostgreSQL_Hacker_Tips.pdf
致谢
感谢 Dave Page 提供反馈、编辑和大量问题。