PostgreSQL 万能论:一个数据库替掉你半个技术栈

查看原文 HN 讨论

文章摘要

作者 Raphael Bauer 是一位 CTO/过渡期管理者,开篇玩了个梗:万物的答案不是 42,而是 PostgreSQL。他从 2003 年一个叫 ColumbaDB 的研究项目开始用 PostgreSQL——Columba 早已消失,PostgreSQL 至今活得比谁都好。2003 年 MySQL 的使用面远大于 PostgreSQL,而且因为没实现全部 SQL 标准而可能更快;但 MySQL 缺了他们需要的东西(全文检索、强大的索引、SQL 标准合规性)。当年那个关键用例正是全文检索:他们本可以用 MySQL 加 Lucene/Solr,但那意味着要跑和维护两套系统、还要同步数据;PostgreSQL 用一个全文检索插件就在一套系统里搞定了,不需要同步、不需要两套运维。最近他还用 PostgreSQL 的 TimescaleDB 插件存超大量的网站分析时序数据(他的项目 Privatracker)。

他把 PostgreSQL 的威力归为三点:一是稳如磐石——PostgreSQL 是「无聊的老技术」,首个版本可追溯到 1996 年,用得广、用得久,数据库的 bug 要磨平需要时间,而 PostgreSQL 有过这个时间;社区很活跃,不断加功能却不破坏老部分,近年拿到了 JSON 文档存储、分区支持、公用表表达式等一堆现代特性。二是易于安装、运行和扩展——各大 Linux 发行版自带、Mac 上有 brew 和 PostgresApp,测试时配合 Testcontainers 可以让测试跑在和生产 100% 相同的真实 PostgreSQL 上,服务器上 apt-get 或 Docker 一把梭,AWS、GCP、Azure、ElephantSQL、CrunchyData、Timescale 等都是点一个按钮就能起并扩容。三是大幅简化 IT 架构——它不只是 RDBMS。

文章的主体就是一份「PostgreSQL 能替掉什么」的清单:

结论:这份清单并不穷尽,PostgreSQL 是非常灵活的软件,还能靠插件不断变强。想跑得快就需要简洁,所以碰到新需求时永远先问:PostgreSQL 不能做这个吗?我们真的需要那个闪亮的新技术 X 吗?「PostgreSQL 也许不是万物的答案,但它是远比你以为的更多问题的答案。」文章还在开头就加了一句更新,说这个话题在 HN 上被讨论过,那个帖子里有大量额外链接、真实经验和批判性观点,很值得一读。

HN 评论精华

这条帖子 438 分、267 条评论,是本组里最长也最有火药味的讨论。HN 的走向和文章标题并不一致:真正吵得最热的不是「Postgres 能不能替掉 X」,而是(一)2003 年 MySQL 与 PostgreSQL 的历史恩怨为什么以 Postgres 胜出收场、(二)SQLite 派对「连 Postgres 都是过度设计」的反向倡议、(三)一大批实战派对「Just use Postgres」这句口号本身的强烈反弹——包括一位 Postgres 长期贡献者亲自出来说这类文章「让人厌烦」。