内容提要
pgrust项目借助AI用Rust“重写”PostgreSQL,实际是通过c2rust机械翻译C源码,13天产出240万行代码并跑通回归测试。作者指出,代码虽可复制,但PostgreSQL三十年的信任、生态与默会知识无法继承,从零重写的第一版已失败。真正价值在于将历史教训转化为可复现测试。
延伸解读
回归测试通过不等于生产可用
pgrust 跑通 PG 核心回归测试,但公开 runner 采用串行执行,且服务端以 -F 关闭 fsync,未覆盖并行调度与持久性。isolation 测试需另备源码树,仓库也无 CI 持续验证。作者本人明确表示尚未生产就绪。因此,测试成绩只能证明功能输出,不能等同于生产环境下的可靠性。
性能数字来自未发布版本
TPC-C 快 50%、分析快 300 倍的说法,源自一个尚未发布的新版本,其代码、benchmark 配置和硬件说明均未公开。作者在 HN 补充,新版本改用列存、批式执行、并行化和更快的哈希表,ClickBench 成绩约比 ClickHouse 慢 2 倍。这更多说明 PG 分析架构有改造空间,而非 Rust 翻译本身带来性能飞跃。
Bun 对照:原团队翻译才可行
Bun 将 Zig 翻成 Rust,方法与 pgrust 相似,但关键差别在于 Bun 翻译的是自己的系统,团队、测试、用户和责任主体不变,翻译后直接进入生产管道验证。即便如此,Bun 仍出现 19 个回归,token 成本约 16.5 万美元。pgrust 翻译的是别人的代码,原社区与责任体系不会跟随,信任需从零积累。
扩展生态是长期合同
PostgreSQL 的 C 扩展依赖 fmgr、hooks、共享内存等接口,虽无跨版本 ABI 承诺,但大量扩展靠此工作。Rust 重写要么做兼容适配层并承担 unsafe 边界成本,要么逐个重写扩展导致生态断裂。pgrust 目前仅移植 12 个 contrib 模块,而 PG 生态有 1600 多个扩展,实用者超 500 个,差距显著。
Q&A
pgrust 项目是如何用 AI 和 Rust 重写 PostgreSQL 的?
pgrust 第二版先用 c2rust 将 PostgreSQL 的 C 源码机械翻译成 Rust,得到可运行核心回归测试的代码,再将 Postgres 拆成约一千个 crate,交给 Claude 逐个改写成更地道的 Rust 写法。流水线为挑 crate、重写、审计三步,13 天产出 240 万行 Rust。
pgrust 的回归测试成绩可信吗?
回归测试成绩本身可信:仓库带 PG 18.3 官方测试文件,抽查 18 个文件与上游逐字节一致,未发现篡改期望输出。但公开 runner 跑的是串行测试且关闭 fsync,没有 CI,isolation 测试不在开箱路径,因此证明的是功能输出,不是并行调度或持久性。
为什么 pgrust 第一版从零重写失败了?
第一版让 Codex 从零写 Rust 版 Postgres,两周写出 25 万行代码,跑过约三分之一回归测试,但最终在 6 月 23 日被归档。作者指出,从零重写很容易漏掉 PostgreSQL 代码中三十年积累的防御性检查、反直觉执行顺序和注释等默会知识,因此无法走通。
pgrust 声称的 TPC-C 快 50%、分析快 300 倍是怎么回事?
这些性能数字来自一个尚未发布的新版本,支撑代码和 benchmark 配置未公开。新版本除了列存,还用了批式执行、并行化和更快的哈希表,ClickBench 成绩约比 ClickHouse 慢 2 倍。这跟“Rust 比 C 快 300 倍”是两回事,存储布局、执行模型、并行策略都换了。
Bun 从 Zig 翻译到 Rust 成功,为什么 pgrust 不行?
Bun 翻译的是自己的系统,团队、测试、用户、商标和责任主体都没换,翻译后直接扔进自家生产管道验证;pgrust 翻译的是别人的代码,PostgreSQL 背后的开发者、用户、发布流程和责任体系都还在原地。代码可以复制,社区与责任主体不会跟过来。
pgrust 跑通回归测试后,继承了 PostgreSQL 的哪些知识?
PostgreSQL 的可靠性知识分四层:测试里的 46,066 条回归查询可复制;代码里的防御性检查和注释可部分带走;历史档案中的因果关系(邮件列表和 commit message)带不走;老开发者脑中的直觉也带不走。pgrust 主要继承了前两层,后两层正是代码翻译带不走的。
pgrust 对 PostgreSQL 扩展生态有什么影响?
PostgreSQL 的 C 扩展接口没有跨大版本稳定 ABI,Rust 重写者要么做兼容 C 的适配层,吞下 unsafe 边界和长期兼容成本;要么把扩展一个个重写,接受生态断裂。pgrust 目前只移植了十二个 contrib 模块,而 PG 生态有 1600 多个扩展,实用五百多个,后面还有很长的路。
pgrust 项目真正值得留下的价值是什么?
pgrust 最有价值的去处不是再造一个 PostgreSQL,而是作为实验装置,测试 PostgreSQL 三十年的知识有多少已固化进代码和回归测试。如果它在真实负载中踩到原版 PG 不会踩的坑,就能变成 PostgreSQL 上游的新测试题。更值得让 AI 做的是考古 pgsql-hackers,把历史教训整理成可复现的测试。