写完《Praise for Alpine Linux》之后,我决定继续写更多的文章来赞美好软件。今天,我想告诉你一些关于 PostgreSQL 的事情。很多人不明白 Postgres 到底有多老:第一个版本 1 是在 1996 年 7 月。它使用了这个标志:经过 25 年的坚持和更好的标志设计,Postgres 成为今天取得巨大成就的最重要的支柱之一在自由软件中,以及 Linux 和 Firefox 之类的软件。 PostgreSQL 已经解决了一个复杂的问题,并以如此有效的程度解决了它,以至于它的所有竞争对手基本上都已经过时了,也许除了 SQLite。首先,Postgres 只是一个非常强大、健壮和可靠的软件,它提供了 SQL 的最佳实现。 2它提供了对其自身行为的大量洞察,并允许有经验的操作员对其进行微调以实现最佳性能。它支持广泛的 SQL 功能和数据类型,我一直能够使用它们高效地存储和检索我的数据。 SQL 通常是 Web 应用程序中的#1 瓶颈,而 Postgres 在为您提供管理该瓶颈所需的工具方面做得非常出色。这些工具也有很好的文档记录。 PostgreSQL 文档非常深入。它让我们其他人感到羞耻,真的。他们不仅有详尽地描述每个特性的全面参考文档,而且还有大量解释 Postgres 的内部设计、架构和操作的散文,以及关于如何完成各种高级任务的详细通俗英语解释,并附有必要的了解这些任务的背景。基本上没有理由阅读关于如何使用 Postgres 做某事的博客文章或 Stack Overflow 的回答——官方文档深入地涵盖了系统的各个方面。该项目由一支纪律严明的工程师团队维护。我对他们处理性能、回归测试和安全性问题的能力充满信心。他们每周发布详尽的开发更新以及详尽的发行说明,让您拥有足够的知识来自信地在部署中运行更新。他们的 gitdiscipline 也是传奇——这是撰写本文时的最新提交: postgres_fdw:修复外部表中生成列的问题。插入外部表时插入列“foo”,因为它试图将值插入到生成的列中。为了解决这个问题,我们假设 postgres_fdwforeign 表中的生成列被定义为代表底层远程表中的生成列:* 在插入或更新时将生成列的 DEFAULT 发送到外部服务器,而不是计算生成的列值在本地服务器上。* 向 postgresImportForeignSchema() 添加一个选项“import_generated”以在从外部服务器导入的外部表的定义中包含列生成的表达式。该选项默认为 true。该假设似乎是合理的,因为这将查询与生成表达式一致的生成列的 postgres_fdw 外部表返回值。同时,修复 postgresImportForeignSchema() 中的另一个问题:它试图包含列当启用 import_default 选项时,生成的表达式作为外部表定义中的列默认表达式。来自 Daniel Cherniy 的错误 #16631。回补到 v12,其中添加了生成的列。讨论:https://postgr.es/m/16631-e929fe9db0ffc7cf%40postgresql.org
归根结底,PostgreSQL 是一个技术复杂的程序,需要经验丰富且熟练的操作员才能有效。学习使用它是一项昂贵的投资,即使它的回报丰厚。尽管 Postgres 偶尔让我感到沮丧或困惑,但总的来说,我对它的感觉是非常积极的。这是一款制作精良的产品,其巨大且仍在不断增长的成功是当之无愧的。当我想到对自由软件生态系统和整个世界产生最重大影响的项目时,PostgreSQL 在该列表中占有一席之地。