PostgreSQL 社区是时候考虑内置连接池了!

由 John Doe 八月 31, 2026

为什么我们默认了 PostgreSQL 必须外挂一层代理才能用?为什么连接池不能是数据库本身就有的功能?

目录

image

十年前,PostgreSQL 不擅长处理高并发连接,PgBouncer 是生产环境的标配; 十年后,PostgreSQL 还是不擅长处理高并发连接,PgBouncer 依然是生产环境的标配。

一个悬而未决十年的问题,一个全行业都在默默 “打补丁” 的功能,是时候摆到台面上讨论了:PostgreSQL 内核,该不该原生内置连接池?

全行业的默契:没有连接池,别想上线

为了验证连接池到底是不是 “刚需”,经过统计全球 20 家主流 PostgreSQL 托管服务商的配置,发现结果一目了然:

服务商 内置连接池 实现方案 说明
Aiven ✅ PgBouncer 起步套餐及以上可用
阿里云 RDS ✅ PgBouncer 默认支持
AWS RDS / Aurora ✅ RDS Proxy 独立托管代理服务
Azure PostgreSQL ✅ PgBouncer 默认支持
Crunchy Bridge ✅ PgBouncer 默认支持
DigitalOcean ✅ PgBouncer 默认支持
EDB Postgres AI ✅ PgBouncer 默认支持
Google Cloud SQL ✅ PgBouncer 需企业增强版
Heroku ✅ PgBouncer 部分套餐支持
Neon ✅ PgBouncer 默认支持
Supabase ✅ PgBouncer / Supavisor 自研 + 开源双方案
Railway / Render ✅ PgBouncer 付费库默认开启
IBM Cloud ❌ — 仅支持用户自行部署
Oracle OCI ❌ — 无托管连接池

剔除两家偏向传统企业的服务商后,所有主流云厂商 100% 标配了连接池能力,其中绝大多数直接采用了 PgBouncer。 换句话说:在真实的生产世界里,根本不存在 “不带连接池的 PostgreSQL”。用户买到的、用到的,永远是 “PostgreSQL + PgBouncer” 的组合体。

荒谬的现状:人人都要,人人都要自己装

既然所有人都需要,那它为什么不能是数据库本身的功能?

眼下的生态现状,是全社会的重复投入:

  • 厂商侧:每一家云服务商都要独立做 PgBouncer 的集成、打包、配置调优、监控适配,各自制定部署规范和使用说明,本质是同一件事重复做二十遍;
  • 用户侧:每一个 DBA 和后端开发者,都要专门学习 PgBouncer 的工作模式、参数权衡、功能边界(比如不支持 LISTEN/NOTIFY),踩过无数坑才能稳定用好;
  • 运维侧:每套生产架构都要多维护一层代理组件,多一个故障点,多一份性能开销,多一套监控告警和容灾预案。

打一个形象的比方:这就像你去买车,新车出厂居然没有挡风玻璃。销售理直气壮地说:“大家都自己装啊,门口汽配城就有,装完就能开。” 你确实能装,装完也确实能开,但你永远会觉得哪里不对 ——这本该是原厂就该配齐的东西。

是时候把连接池 “还给” 内核了

放眼整个数据库行业,内置连接池从来不是什么新鲜事。 MySQL、MongoDB 等主流产品早就在内核层面实现了连接池能力。用户拿到一个实例、一个地址、一个端口,开箱即用,不用额外部署代理,不用学习第三方组件,更不用为连接数突增手忙脚乱。

PostgreSQL 并非做不到,而是长期受困于 “进程模型 vs 线程模型” 的历史技术路线之争,内核层面的改进步履维艰。 但我们不妨算一笔账:过去十几年间,整个 PostgreSQL 生态里,所有厂商投入的研发人力、所有用户付出的学习成本、所有运维踩过的坑,这些 “为连接数问题付出的代价” 加起来,早已是一个天文数字。

如果能在内核中内置生产级连接池,这会是 PostgreSQL 有史以来投入产出比最高的体验改进之一:

  • 云厂商无需再各自维护 PgBouncer 集成方案,生态重复建设大幅减少;
  • 新手学习曲线大幅降低,不用刚入门就被 “连接池 / 事务池 / 语句池” 劝退;
  • 业务架构少一层代理跳转,性能损耗更低,故障链路更短,稳定性再上台阶。

写在最后

当然,内核级连接池的落地会涉及大量技术权衡与历史包袱,不可能一蹴而就。 但当整个行业都在用同一种方式 “给内核打补丁”,当所有使用者默认接受 “数据库必须加一层代理才能用”,信号已经足够清晰:

连接池从来不是什么 “锦上添花的非核心功能”,它是生产环境的刚性需求,是数据库易用性的基石。 PostgreSQL 社区,是时候认真考虑把它内置进内核了。