Postgres用Rust重写,100%通过回归测试
速览
PostgreSQL数据库(Postgres)使用Rust语言进行了重写,目前已经100%通过了原版Postgres的回归测试。这意味着Rust版本在功能兼容性上达到了与C语言版本一致的水平。这一进展可能为Postgres带来更好的内存安全性和性能潜力。
AI 深度解读
背景
PostgreSQL 作为久经考验的开源关系数据库,其内部架构已经积累了数十年的 C 语言代码。修改核心逻辑不仅风险高,而且开发周期长。近年来 Rust 语言以其内存安全和高并发能力在基础设施领域获得广泛关注。pgrust 项目正是这一趋势下的产物:用 Rust 重新实现 PostgreSQL,目标是保持与原生 Postgres 行为完全兼容的同时,让内部改造变得更容易。
该项目最初于 2023 年启动,经历了多轮迭代:从第一版公开演示,到完成 67% 的回归测试兼容性,再到如今通过 Postgres 18.3 全部 46,000 多个回归查询。pgrust 的开发过程大量借助 AI 辅助编程,探索从内部分裂 Postgres 服务器的可能性。
核心内容
pgrust 是一个用 Rust 重写 PostgreSQL 内部的项目,当前针对 Postgres 18.3 版本实现兼容。它已经通过了 Postgres 官方回归测试套件中的全部 46,000 多个查询,输出结果与原生 Postgres 完全一致。
磁盘兼容性:pgrust 可以直接读取现有 Postgres 18.3 的数据目录,这意味着用户可以切换存储引擎而不必迁移数据。它支持从已有的数据目录启动,并且初始化过程使用与原生 Postgres 相同的格式。
项目目标:保持 Postgres 的行为“形状”(behavior Postgres-shaped),将真实的 Postgres 回归测试作为判断标准(oracle),然后利用 Rust 和 AI 辅助编程来探索更深层的服务器改动。目标是让从内部修改 Postgres 变得更容易——比如引入多线程内部机制、内置连接池、更好的 JSON 负载支持、快速的分支和分支工作流、无 Vacuum 设计的存储实验、针对糟糕查询和 AI 生成 SQL 的运行时护栏,以及减少突然的计划切换问题。
当前状态:pgrust 尚未达到生产就绪,也未进行性能优化。现有 Postgres 扩展和 PL/Python、PL/Perl、PL/Tcl 等过程语言扩展一般不兼容。部分内置的 contrib 模块已经被移植,未来可能会有更多兼容性。
试用方式:
- WebAssembly 在线演示:https://pgrust.com
- Docker:拉取
malisper/pgrust:v0.1镜像,运行后使用容器内的 psql 客户端连接。 - 本地构建:支持 macOS(通过 Homebrew 安装依赖)和 Debian/Ubuntu(通过 apt),然后使用 cargo 编译。构建后通过
--initdb创建数据目录并启动,使用标准的 psql 连接。 - 运行回归测试:项目提供了
scripts/run-regression脚本,会使用 pgrust 自己的--initdb和仓库中附带的 Postgres 18.3 测试文件,需要 PATH 上有 Postgres 18 的 psql 客户端。
验证结果:项目主页声明确认 pgrust 在超过 46,000 个回归查询上匹配了 Postgres 的预期输出。
仓库维护:新版本 pgrust 已到达回归测试里程碑的代码在仓库主分支上;旧的公开实现归档在 archive/pre-fabled-2026-06-23 分支。项目采用 AGPL-3.0 许可证。提供 issue、Discord 和邮件列表作为反馈渠道。
关键要点
- pgrust 用 Rust 重写 Postgres 核心,目标版本 Postgres 18.3。
- 通过全部 46,000+ 回归测试,结果与原生 Postgres 完全一致。
- 磁盘兼容:可直接使用 Postgres 18.3 的数据目录启动。
- 不是生产就绪,未做性能优化。
- 扩展和过程语言扩展(PL/Python, PL/Perl, PL/Tcl)目前一般不兼容,部分 contrib 模块已移植。
- 列出未来探索方向:多线程内部、内置连接池、JSON 负载优化、快速分叉/分支、无 Vacuum 存储实验、运行时查询护栏、减少计划切换。
- 提供多种试用方式:WebAssembly 演示、Docker、本地构建(macOS / Debian/Ubuntu)。
- 开发过程大量使用 AI 辅助编程。
- 许可证:AGPL-3.0。
意义与影响
pgrust 项目的里程碑式进展表明:用 Rust 重写一个成熟且庞大如 PostgreSQL 的数据库核心在技术上完全可行,且能达到与 C 原版一致的行为兼容性。这不仅验证了 Rust 在系统软件领域的潜力,也为后续更激进的内部改造(例如多线程架构、自动内存管理替代 Vacuum)铺平了道路。
对于 Postgres 生态而言,pgrust 可能带来以下影响:
- 降低修改门槛:Rust 的类型系统和所有权模型能减少内存安全类 Bug,使得新人更容易安全地贡献代码。
- 加速功能创新:AI 辅助编程与 Rust 结合,可以快速实验那些在 C 版本中风险过高的改动(如并发模型、存储引擎)。
- 云原生与大规模部署:内置连接池、快速分支、无 Vacuum 等特性直击现代运维痛点,可能催生新一代 Postgres 兼容数据库服务。
- 扩展兼容性挑战:短期内扩展和过程语言的不兼容是主要障碍,但若社区参与,未来可通过兼容层或重写插件来弥补。
pgrust 当前虽非生产可用,但其通过全部回归测试的事实已经证明了正确性基础。随着性能优化和扩展兼容的推进,它有望成为 Postgres 社区的“实验分支”,或最终成为主流 Postgres 分发之一。同时,该项目也展示了“保留测试作为 oracle + 新语言 + AI 辅助”这一开发范式在大型复杂项目中的可行性。
