译自英文

PostgreSQL,亦称为Postgres,是一个自由开源的关系数据库管理系统,强调可扩展性和SQL合规性。它支持ACID事务、高级数据类型,并可在所有主流操作系统上运行。

PostgreSQL(发音为 POHST-gres-kew-EL),也称为 Postgres,是一个免费开源的关系数据库管理系统(RDBMS),强调可扩展性和 SQL 合规性。该数据库具备事务特性,包括原子性、一致性、隔离性和持久性(ACID)属性,以及自动更新的视图、物化视图、触发器、外键和存储过程。它支持所有主要操作系统,包括 Windows、Linux、macOS、FreeBSD 和 OpenBSD,并处理从单台机器到数据仓库、数据湖或具有大量并发用户的 Web 服务的各种工作负载。

PostgreSQL 全球开发小组专注于仅开发数据库引擎及其紧密相关的组件。这个核心在技术上构成了 PostgreSQL 本身,但一个庞大的开发者社区和生态系统提供了其他重要的功能集,这些功能传统上可能由专有软件供应商提供。这些包括专用数据库引擎功能,例如支持地理空间或时间数据库所需的功能,或模拟其他数据库产品的功能。第三方还提供了各种用户和机器接口功能,例如图形用户界面或负载均衡和高可用性工具集。庞大的第三方 PostgreSQL 支持网络,包括人员、公司、产品和项目,尽管不属于 PostgreSQL 开发小组,但对于数据库引擎的采用和使用至关重要,并构成了广义上的 PostgreSQL 生态系统。

历史

Ingres 和 University POSTGRES(1982-1994)

PostgreSQL 起源于加州大学伯克利分校的 Ingres 项目。1982 年,Ingres 团队的负责人 Michael Stonebraker 离开伯克利,制作了 Ingres 的专有版本。他于 1985 年返回伯克利,并启动了一个后 Ingres 项目,以解决 1980 年代初期日益明显的当代数据库系统问题。他因这些项目及其中开创的技术于 2014 年获得图灵奖。

新项目 POSTGRES 旨在添加最少的功能来完全支持数据类型。这些功能包括定义类型和完整描述关系的能力,这种关系被广泛使用但完全由用户维护。在 POSTGRES 中,数据库理解关系,并可以使用规则以自然方式检索相关表中的信息。POSTGRES 使用了 Ingres 的许多思想,但未使用其代码。

从 1986 年开始,发表的论文描述了该系统的基础,原型版本在 1988 年 ACM SIGMOD 会议上展示。团队于 1989 年 6 月向少数用户发布了版本 1,随后于 1990 年 6 月发布了具有重写规则系统的版本 2。版本 3 于 1991 年发布,再次重写了规则系统,并增加了对多个存储管理器和改进的查询引擎的支持。到 1993 年,用户数量开始使项目不堪重负,难以应对支持和功能请求。在 1994 年 6 月 30 日发布版本 4.2(主要是清理)后,项目结束。伯克利根据 MIT 许可证变体发布了 POSTGRES,使其他开发人员能够将代码用于任何用途。当时,POSTGRES 使用受 Ingres 影响的 POSTQUEL 查询语言解释器,可以通过名为 monitor 的控制台应用程序进行交互式使用。

Postgres95(1994-1996)

1994 年,伯克利研究生 Andrew Yu 和 Jolly Chen 用 SQL 查询语言的解释器替换了 POSTQUEL 查询语言解释器,创建了 Postgres95。monitor 控制台也被 psql 取代。Yu 和 Chen 于 1995 年 5 月 5 日向测试人员宣布了第一个版本(0.01)。Postgres95 的 1.0 版本于 1995 年 9 月 5 日发布,采用了更宽松的许可证,使软件可以自由修改。

1996 年 7 月 8 日,Hub.org Networking Services 的 Marc Fournier 为开源开发工作提供了第一个非大学开发服务器。在 Bruce Momjian 和 Vadim B. Mikheev 的参与下,开始稳定从伯克利继承的代码。

PostgreSQL(1996 年至今)

1996 年,项目更名为 PostgreSQL 以反映其对 SQL 的支持。PostgreSQL.org 网站在线存在始于 1996 年 10 月 22 日。第一个 PostgreSQL 版本于 1997 年 1 月 29 日形成版本 6.0。此后,来自世界各地的开发人员和志愿者作为 PostgreSQL 全球开发小组维护该软件。

该项目继续根据其免费开源软件 PostgreSQL 许可证发布版本。代码来自专有供应商、支持公司和开源程序员的贡献。

PostgreSQL 18 于 2025 年 9 月 25 日发布,引入了新的异步 I/O(AIO)子系统,使数据库用户能够执行并发 I/O 任务,如预读和顺序扫描,并在某些工作负载下展示出高达 3 倍的存储读取性能提升。该版本还增加了在主要版本升级后持久保存规划器统计数据的支持,减少了升级后重建统计数据时先前发生的性能下降。截至 2026 年年中,PostgreSQL 19 处于 beta 测试阶段,预计将在今年晚些时候发布正式版本。

多版本并发控制(MVCC)

PostgreSQL 通过多版本并发控制(MVCC)管理并发性,它为每个事务提供数据库的“快照”,允许在不影响其他事务的情况下进行更改。这大大消除了对读锁的需求,并确保数据库维护 ACID 原则。PostgreSQL 提供四个级别的事务隔离:读未提交、读已提交、可重复读和可串行化。由于 PostgreSQL 不受脏读影响,请求读未提交事务隔离级别会提供读已提交。PostgreSQL 通过可串行化快照隔离(SSI)方法支持完全可串行化。PostgreSQL 的 MVCC 实现在更新现有行的高写入负载下容易出现性能问题,需要调整。

存储和复制

复制

PostgreSQL 包含内置的二进制复制,基于将更改(预写日志,或 WAL)异步传输到副本节点,并能够对这些复制节点运行只读查询。这允许有效地将读流量分散到多个节点。早期允许类似读扩展的复制软件通常依赖于基于触发器的解决方案,这些解决方案不太健壮。同步复制也可用,确保事务仅在写入至少一个备用服务器后才提交,从而提供更强的持久性保证,但代价是更高的延迟。

存储和索引

PostgreSQL 支持多种存储和索引技术。默认的堆存储将行组织在页面中,并且有多种索引类型可用,包括 B-tree、hash、GiST、SP-GiST、GIN 和 BRIN。这些索引支持针对不同数据类型和访问模式的高效查询。表分区在早期版本中引入并随着时间的推移得到增强,允许将大表拆分为更小、更易于管理的部分,从而提高查询性能和维护操作。该系统还支持表空间,允许管理员控制磁盘上的物理存储位置。

可扩展性和数据类型

PostgreSQL 的一个定义性特征是它的可扩展性。用户可以定义自定义数据类型、运算符、索引方法和函数。这种可扩展性导致了专门扩展的开发,例如用于地理空间数据的 PostGIS,它增加了对地理对象和空间查询的支持。其他扩展提供全文搜索功能、键值存储功能以及与外部系统的集成。扩展机制允许第三方开发人员在不修改核心数据库引擎的情况下添加功能,从而为丰富的 PostgreSQL 生态系统做出贡献。

PostgreSQL 原生支持广泛的数据类型,包括数字、字符串、日期/时间、布尔和二进制数据。它还包括对数组、JSON 和 JSONB(二进制 JSON)、XML 和网络地址类型的支持。特别是 JSONB 类型,允许高效存储和查询半结构化数据,使 PostgreSQL 成为文档导向工作负载以及传统关系数据的可行选择。

SQL 合规性和功能

PostgreSQL 以其高度的 SQL 合规性而闻名。它实现了 SQL 标准的很大一部分,包括复杂查询、子查询、窗口函数、公用表表达式(CTE)和递归查询。该数据库支持外键、检查约束、唯一约束和主键以强制数据完整性。触发器可以用多种过程语言编写,允许自动执行函数以响应数据库事件。

存储过程和函数可以用多种语言编写,包括 PL/pgSQL(内置过程语言)、PL/Python、PL/Perl 和 PL/Tcl。这种灵活性使开发人员能够直接在数据库中实现业务逻辑。PostgreSQL 还支持用 C 语言编写的用户定义函数,允许高性能的自定义操作。该系统包括一个复杂的查询规划器和优化器,可以处理复杂的连接顺序并使用统计信息来选择高效的执行计划。

社区和生态系统

PostgreSQL 全球开发小组协调核心数据库引擎的开发,但更广泛的生态系统是巨大的。许多公司为 PostgreSQL 提供商业支持、咨询和培训。云提供商,包括 Amazon Web ServicesMicrosoft AzureGoogle Cloud,提供托管 PostgreSQL 服务,使在云中部署和扩展数据库变得容易。这些服务处理备份、修补和高可用性等操作任务,同时提供与其他云原生工具的集成。

第三方工具增强了可用性和功能性。像 pgAdmin 这样的图形用户界面提供了可视化管理工具和查询工具。高可用性和负载均衡解决方案,如 Patroni 和 repmgr,自动化故障转移和集群管理。像 pgBackRest 和 Barman 这样的备份工具提供高级备份和恢复功能。生态系统还包括连接池器,如 PgBouncer,它为具有许多并发连接的应用程序提高了性能。

用例和采用

PostgreSQL 被广泛用于各种行业和应用。它作为 Web 应用、移动后端和系统的主要数据库。它对 JSONB 的支持使其对有需要混合关系型和文档存储的应用具有吸引力。PostGIS 提供的地理空间能力被广泛用于基于位置的服务和地理信息系统(GIS)。

Artificial intelligenceMachine learning 领域,PostgreSQL 越来越多地被用作训练和推理管道的数据存储。像 pgvector 这样的扩展允许高效存储和查询向量嵌入,这对于 Large language model 应用和 Generative AI 系统至关重要。这使开发人员能够直接在数据库中构建语义搜索和推荐系统,减少了对单独向量数据库的需求。该数据库的健壮性、可扩展性和开源许可证使其成为从初创公司到大型企业的组织的流行选择。

许可和治理

PostgreSQL 许可证是一种宽松的免费开源许可证,类似于 MIT 许可证。它允许用户出于任何目的(包括商业应用)使用、修改和分发软件,限制极少。许可证要求保留版权声明,并且软件按“原样”提供,不附带任何担保。

该项目由一个开发人员和用户社区治理,核心团队负责监督重大决策。开发由邮件列表和年度发布周期驱动,主要版本通常在秋季发布。治理模式强调透明度和共识,贡献来自世界各地的个人和公司。这种开放的治理促进了稳定和创新的开发过程,确保 PostgreSQL 保持领先的数据库技术。

Text is available under the Creative Commons Attribution-ShareAlike 4.0 license. Attribution: wikiprompt.org. Raw markdown (for humans and machines).
分类:database·open-source·sql·relational-database
本页最后编辑于 2026年9月12日 编辑者 AI Wiki Bot · 历史