如果出于某种原因,您一直生活在岩石下并且不熟悉Postgres,请阅读我们的文章 为什么Postgres .或者,如果您只是想要要点:
Postgres的起源始于安格尔项目。它最初在加州大学伯克利分校开始,在 INMichael Stonebraker的指导下作为Ingres(IN TERACTIVE G RAPHICS RE RE TRIEVAL S S ystem)。他们改变了课程,转而资助了一个关系数据库项目。
最初的语言是QUEL,甚至不是SQL。ANSI在1986年正式设定了SQL的偏好,许多关系项目都朝着这个方向发展。SQL支持是在1995年Postgres95发布时添加的。
1996年,当PostgreSQL的第一个版本作为6.0发布时,开发离开了学术界,PostgreSQL全球开发团队成立,这是目前领导该项目的领导小组。
MVCC 使Postgres成为现在的基础MVCC于1999年与Postgres 6.5一起发布。
今天,在使用可靠的数据库时,有很多事情是理所当然的。2000年,Postgres开始了成长之旅。新闻稿(如果他们当时做了这些事情)可能会读到:Postgres JOINS使用外键和join支持加入其他数据库等级。
2000 年代初的其余部分带来了更多关键的基础部分,主要关注的是成为可靠的数据库和 SQL,您获得了以下功能:
在观察 2000 年的一些细节时,我最喜欢的事情之一是一些 贡献的名字 ,这些名字今天仍然是 Postgres 社区的支柱。这些人的范围从我的同事Tom Lane到Josh Berkus,Bruce Momjian,Hiroshi Inoue和Peter Eisentraut。
但这不仅仅是提交,出现在 PgCon 或 PGConfEU 上,你会看到一些 here在2006年PostgreSQL周年峰会上(差不多20年前)的人,包括Magnus Hagander,Stephen Frost,Bruce Momjian,Devrim Gunduz,Oleg Bartunov,David Fetter,Robert Treat,Simon Riggs,Joe Conway,Tom Lane, 安德鲁·邓斯坦(Andrew Dunstan)、戴夫·佩奇(Dave Page)、让-保罗·阿古多(Jean-Paul Argudo)等等(对于我错过的任何人,你可以指出我在下一次会议上亲自想念你)。
Ned Lilly说:“每个参与Postgres的人都对它的前景感觉非常好。对于他们来说,[认为]这里有市场机会并不是什么大事。甲骨文是铁板一块,所以可视化[成功]并不是一个飞跃。开源数据库浪潮开始达到顶峰。
上述声明是在2000年与第一家Postgres公司 Great Bridge 联合发表的。 内德说得对,但他是5年、10年还是早了15年?我们永远不会知道,因为它是互联网的牺牲品,在那次声明之后不久,该公司 shutdown 于 2001 年关闭。如果你没有注意到 Crunchy Bridge 的命名对PostgreSQL历史的轻微点头,那么现在你知道了。
随着我们进入 2000 年代并进入 2005 年,Postgres 可以被视为一个相当可靠的数据库。凭借更丰富的事务支持、广泛的 SQL 支持以及 WAL 和 VACUUM 等改进,如果您是早期采用者,您开始信任它来处理生产工作负载。它是值得信赖的,但在易用性方面仍有一些路要走。
在这个时间点,我们开始看到具有多个不同主题的功能组合,可以指向:
从早期开始,我们仍然看到同一组人参与其中,但其他人开始贡献标题功能。将出现一些主题。一如既往地提供更多的SQL支持和更好的性能,将Postgres作为具有新数据类型的可扩展数据库。就我个人而言,我认为强大的报告功能确实使Postgres改变了游戏规则。在 2009 年的 Postgres 8.4 中,我们 有了窗口函数和公用表表达式 (CTE), , 有了这些,我个人永远不会回头看另一个数据库 。
有了Postgres作为坚实的基础,大约在这个时候,我们开始看到它在更广泛的数据生态系统中的印记。由于坚实的代码库及其允许的许可,许多公司采用了Postgres并开始分叉它。在 2000 年代早期到后期,这些公司中的大多数要做的第一件事就是将 MPP 支持添加到 Postgres,以便它可以针对更多专注于 OLAP 的工作负载。当您将其与对窗口函数和 CTE 等内容的支持相结合时,您就拥有了一些新的、强大的功能,而无需从头开始构建它。这种类型的产品可以将成熟为数据库所需的时间缩短数年。许多原始叉子今天还不存在,但有些在其他产品中仍然存在......
尽管Postgres分叉激增,Postgres仍在做它一直做的事情 - 继续前进。
如果你问 我 ,这是Postgres变得很酷的开始。对监听/通知(数据库中的发布-订阅)和 hstore(键/值数据类型)之类的支持确实不符合古板的旧关系数据库的模式。通过支持 pg_upgrade.随着 GIN 和 GiST 指数的到来,我们开始获得的不仅仅是您的标准 B 树指数。
扩展始终是Postgres的一部分,但是随着集成中的一些重构,它们变得更容易被用户使用。我们看到了Postgres外部数据包装器的发展,因此您可以连接不同的Postgres数据库。
不仅仅是旧的无聊数据类型、列和关系。然而,所有这些都建立在相同的 ACID 兼容、值得信赖的基础上。
如果世界现在还没有注意到Postgres,你就会被敲响警钟。随着大数据浪潮开始降温,但NoSQL数据库(Mongo和Couchbase)的兴起,很明显开发人员希望以不同的方式处理他们的数据。Postgres听了,但后来有点欺骗它的JSON支持。在 9.2 中,它是 JSON 验证,但被扔到文本字段中。实际上,我们必须再等两年才能在Postgres中提供可靠的JSON支持。
但。这并没有阻止人们开始注意到这一点。随着Heroku的兴起,以便于应用程序部署,Heroku Postgres成为默认数据库,从MySQL数据库的共享托管和应用程序的VPS到PaaS的浪潮以及更多专用数据库基础设施正在增长。
Postgres 9.3 很棒,我们得到了横向连接、可更新的外部表、校验和等等。但是 9.4 在 JSONB 数据类型中,我们得到了更好的 JSON 。 这是磁盘上 JSON 的二进制表示形式,这意味着 GIN 索引可以让您更轻松地为数据编制索引,而无需对非常特定的 JSON 函数进行索引。JSONB 仍然是一种数据类型和功能,当人们第一次听说它时会让人大吃一惊。
Postgres不仅适用于想要闪亮功能的应用程序开发人员。逻辑解码为未来几年在 Postgres 中更轻松地捕获变更数据 (CDC) 奠定了基础 CDC。刷新具体化视图可实现更丰富的报告用例。后台工作线程启用了更多功能和创造性用例,特别是对于扩展。
正是在9.3时间线前后,亚马逊宣布在Re:Invent上支持RDS上的PostgreSQL支持。最多参加Re:Invents并在房间里,这是我唯一能回忆起观众完全起立鼓掌的人。演讲者明显被掌声的持续时间甩开了,这不是亚马逊宣布一件新事,而是他们屈服于不断的客户要求。
在这一点上,我们开始达到标题功能不太常见的地步,相反,我们看到了一个稳定的性能改进和继续增强现有功能的主题。JSONB 获得了对内联更新的支持,我们开始看到更多的并行执行。但这并不全是小更新,根据您的需求,这里可能有一个您一直渴望的主要功能。一些亮点包括:
几年来的这种进步在很大程度上仍然是个人贡献者的结果。我们还看到一些公司在特定领域投资,如EnterpriseDB(专注于Oracle兼容性),2ndQuadrant(专注于复制),Postgres Pro(专注于JSONB)和Crunchy Data(专注于安全性和云原生)。
Postgres扩展就像库一样,它们在不贡献主代码的情况下改变了Postgres的行为。Postgres长期以来一直带有contrib扩展,其中一些被大量使用和采用......hstore是JSONB到达Postgres之前人们喜欢的键/值存储。 pg_stat_statements 得到了一些重大改进,使其成为Postgres中最有价值的扩展之一。
在contrib之外,PostGIS与Postgres并行移动,将Postgres转变为世界上最强大,功能最丰富的地理空间数据库。它不仅仅是一个技巧小马,它引入了新的运算符、新的函数和数据类型。有一段时间,PostGIS是一个突出的例子,首先我们看到一些聪明的新扩展,如 HyperLogLog 。然后我们看到整个公司都是围绕扩展Postgres的想法建立的,首先是Citus,然后是Timescale,现在是大量的公司。
从本质上讲,也许它一直和今天一样,一个你可以信任的可靠数据库——毕竟这不是你想要的数据库吗?然而,其他新的闪亮事物可能会在短时间内吸引您的注意力,只是为了让您回到我们已经拥有 20 多年的可靠稳定主力。
是Heroku把它作为默认的,所以每个Rails开发人员都开始使用Postgres吗?必须给予一些功劳。
即使在今天,人们仍然对Postgres中丰富的JSON支持感到震惊,并且它已经存在了10多年。
其丰富的SQL支持,持续的性能改进以及数据处理方式的灵活性不容忽视。
我 个人 认为,如果没有 Heroku 和 JSON 支持的结合,超大规模提供商就不会有增加支持的压力——如果超大规模提供商不支持它,你只会选择更可用和更易于访问的东西。
但是,如果没有对性能和功能的持续改进以及稳定的发布周期并专注于质量,它将永远没有机会。为此,功劳总是归功于开发人员和提交者,他们经常为使Postgres成为可靠的软件而贡献吃力不讨好的工作。