pgrust:用 Rust 重写 PostgreSQL 的革命性数据库项目完整解析

pgrust:用 Rust 重写 PostgreSQL 的革命性数据库项目完整解析

pgrust:用 Rust 重写 PostgreSQL 的革命性数据库项目完整解析

【免费下载链接】pgrustPostgres rewritten in Rust, now faster than Postgres and Clickhouse项目地址: https://gitcode.com/GitHub_Trending/pg/pgrust

pgrust是一个用 Rust 语言完整重写 PostgreSQL 的开源数据库项目,以 PostgreSQL 18.3 为兼容目标,已通过超过 46,000 条官方回归查询测试,并宣称在事务负载上比原版快 50%、在分析负载上快约 300 倍。本文将从项目背景、核心亮点、真实性能数据、安装体验、源码结构到路线图,为你带来一次关于这个 Rust 重写 PostgreSQL 项目的完整解析。

pgrust 是什么:为什么有人要用 Rust 重写 PostgreSQL?

PostgreSQL 是世界上最流行的开源关系型数据库之一,但它的核心代码由 C 语言写成,历经 30 余年积累,体量庞大、内部耦合深。C 语言带来了极致性能,却也带来了内存安全风险进程级并发模型老旧难以从内部深度改造等现实问题。

pgrust 的诞生正是为了改变这一切:用 Rust 这门以内存安全零成本抽象著称的现代语言,配合 AI 辅助编程,把 PostgreSQL 的核心逐行重写,同时坚持一个黄金准则——保持行为与 PostgreSQL 完全一致

简单概括 pgrust 的三个关键词:

  • 🎯兼容:目标是 100% 兼容 PostgreSQL 18.3 的行为
  • 🧪可验证:以 PostgreSQL 官方回归测试作为"判官"
  • 🚀更快:从内部改造并发与存储模型,追求质的飞跃

pgrust 与普通"分叉"的本质区别

很多数据库项目只是在 PostgreSQL 上"打补丁",而 pgrust 是从零重写内核。它没有沿用 C 语言的进程模型,而是探索多线程、连接池内建等全新架构。这意味着它不仅仅是"快一点",而是从根上改变了数据库的运行方式。

pgrust 核心亮点:兼容性、回归测试与磁盘兼容

兼容 PostgreSQL 18.3,行为级对齐

pgrust 明确以PostgreSQL 18.3为兼容基准,并在持续迭代中逼近完全一致。开发团队将真实 PostgreSQL 测试作为"预言机",任何行为差异都会被测试暴露并修正。

通过 46,000+ 回归查询验证

这是 pgrust 最硬核的亮点之一:项目已匹配 PostgreSQL 官方回归套件的预期输出,累计超过 46,000 条回归查询全部通过。最新未发布版本更是宣称100% 通过完整回归套件。这意味着你在 PostgreSQL 上写的大多数 SQL,pgrust 都能给出同样的结果。

磁盘级兼容,迁移近乎零成本

pgrust 与 PostgreSQL磁盘格式兼容,可以直接从一个已有的 PostgreSQL 18.3 数据目录启动。换句话说,不需要导出导入、不需要重建索引,现有数据文件可以直接"换引擎"运行。

对比维度PostgreSQL (C)pgrust (Rust)
内核语言CRust
兼容目标自身PostgreSQL 18.3
回归测试官方套件46,000+ 查询通过
磁盘兼容——可直接启动 PG 数据目录
并发模型进程 per 连接线程 per 连接(新版)

pgrust 性能揭秘:比 PostgreSQL 快多少?与 ClickHouse 对比如何?

性能是 pgrust 最吸引眼球的部分。根据官方公布的数据(最新未发布版本):

  • 事务负载:比 PostgreSQL快约 50%
  • 📊分析负载:比 PostgreSQL快约 300 倍
  • 🏎️ClickBench 基准:目前比 ClickHouse慢约 2 倍,但团队认为完全可以进一步超越

项目定位语非常霸气:"现在比 PostgreSQL 和 ClickHouse 都快。"虽然公开版本还未完全兑现,但方向已经非常明确——用 Rust 彻底释放 PostgreSQL 的潜力

为什么能快这么多?核心在于架构革新:

  • 线程替代进程:传统 PostgreSQL 每个连接一个进程,上下文切换开销巨大;pgrust 改为每连接一个线程,资源占用大幅降低
  • 内建连接池:省去外部连接池组件的转发开销
  • 存储实验:探索免 VACUUM(无清理)设计,减少维护成本

如何快速体验 pgrust:Docker 一键启动教程

想最快体验 pgrust,最简单的方式是使用官方 Docker 镜像(镜像与官方 postgres 镜像完全兼容,支持 POSTGRES_PASSWORD、POSTGRES_USER 等常用环境变量):

docker run -d --name pgrust -e POSTGRES_PASSWORD=secret malisper/pgrust:v0.1

等待容器就绪后,即可用容器内的 psql 客户端连接:

docker exec -it -e PGPASSWORD=secret pgrust psql -h 127.0.0.1 -U postgres

连接成功后,输入一条最简单的 SQL 验证:

select version(), 1 + 1 as two;

如果看到 PostgreSQL 风格的版本输出,说明 pgrust 已经跑起来了!🎉 此外,官方还提供浏览器内 WebAssembly 演示,无需安装任何东西就能在线体验,非常适合初学者先"试个水"。

小提示:Dockerfile 是一个官方 postgres 镜像的"平替"实现,保留了相同的环境变量约定与初始化脚本语义,替换成本极低。感兴趣可查看 Dockerfile 与 docker/entrypoint.sh。

从源码编译 pgrust:完整构建步骤(以 Debian/Ubuntu 为例)

想深入体验 pgrust,源码编译是最好的方式。首先获取仓库:

git clone https://gitcode.com/GitHub_Trending/pg/pgrust cd pgrust

安装编译依赖:

sudo apt-get update sudo apt-get install -y build-essential pkg-config libicu-dev libssl-dev libldap2-dev libpam0g-dev postgresql-client-18

编译 release 版本:

PGRUST_PGSHAREDIR="$PWD/vendor/postgres-18.3/share" \ cargo build --release --locked --bin postgres

初始化数据目录:

target/release/postgres --initdb \ -D /tmp/pgrust-data \ -L "$PWD/vendor/postgres-18.3/share" \ --no-locale --encoding UTF8 -U postgres

启动 pgrust 服务(注意设置栈大小,这是 Rust 侧栈模型的特殊要求):

ulimit -s 65520 RUST_MIN_STACK=33554432 target/release/postgres \ -D /tmp/pgrust-data -F -c listen_addresses= \ -k /tmp -p 5432 -c io_method=sync -c max_stack_depth=60000

最后连接并验证:

psql -h /tmp -p 5432 -U postgres -d postgres -c "select 1 + 1 as two;"

运行 pgrust 回归测试:亲身体验 46,000+ 查询兼容性

pgrust 最让人放心的一点,就是它的兼容性是可验证的。项目提供了一个仅需克隆仓库就能运行的回归测试脚本 scripts/run-regression,配合随仓库附带、位于 vendor/postgres-18.3/ 的官方测试文件,无需安装 C 版 PostgreSQL 即可运行:

PGRUST_BIN="$PWD/target/release/postgres" scripts/run-regression

它会自动按官方 parallel_schedule 顺序跑完整套回归测试,并把 pgrust 的输出与官方预期逐条比对。跑完看到全绿的那一刻,你会真切感受到"用 Rust 重写 PostgreSQL"这件事有多扎实。

pgrust 源码结构解析:Rust 模块化重写思路

pgrust 的源码组织方式非常工程化,整个项目是一个 Rust workspace(见 Cargo.toml),包含数百个 crate,主要分为两大块:

  • crates/backend/:数据库后端核心,按 PostgreSQL 源码模块对应划分,如 access(存取方法)、executor(执行器)、optimizer(优化器)、parser(解析器)、storage(存储)、utils(工具)等
  • crates/_support/:支撑层,包含大量基础类型(types_*)、FFI 绑定、以及独特的seam 机制

独特的 seam(接缝)机制

为了打破 crate 之间循环依赖,pgrust 设计了seam!宏(见 crates/_support/seam/seam_core):函数槽只在真正需要时安装,启动时由各 crate 的init_seams()统一注册。这种设计让重写后的代码保持了清晰的模块边界,也为后续深度改造预留了"手术口"。

AI 辅助编程的产物

pgrust 是AI 辅助编程大规模实践的标志性项目:大量 C 代码通过 AI 工具转换为 Rust,再由人工审查打磨。这也让项目迭代速度惊人——从启动到通过 46,000+ 回归查询,仅用了很短的时间。

pgrust 路线图:未来还会带来哪些惊喜?

根据官方路线图,pgrust 接下来会重点推进:

  • 🧵多线程内核:进一步挖掘线程模型的性能潜力
  • 🔌内建连接池:省去 PgBouncer 等外部组件
  • 📦JSON 负载优化:让 JSONB 场景更快
  • 🌿免 VACUUM 存储:探索无清理架构,彻底告别膨胀焦虑
  • 🛡️坏查询护栏:为糟糕 SQL 和 AI 生成 SQL 提供运行时保护
  • 🎯更少的计划突变:优化器计划切换更平稳,避免性能抖动

⚠️ 需要提醒的是:pgrust目前尚未达到生产就绪状态,公开版本也未做极致性能优化,部分扩展(如 PL/Python、PL/Perl)暂不兼容。适合尝鲜、研究、学习,生产环境建议观望后续版本。

总结:pgrust 适合谁?值得关注吗?

如果你是数据库爱好者Rust 学习者,或是对"PostgreSQL 内核还能怎样被改造"充满好奇的开发者,pgrust 绝对是 2026 年最值得关注的开源项目之一。它回答了一个大胆的问题:当 PostgreSQL 遇上 Rust 和 AI,会发生什么?

从 46,000+ 回归测试全通过,到线程级并发模型,再到瞄准 ClickHouse 的分析性能,pgrust 正一步步把"用 Rust 重写 PostgreSQL"从疯狂想法变成现实。虽然距离生产级还有距离,但它已经为整个数据库行业打开了一扇新的大门——这扇门背后,可能是一个更快、更安全、更易改造的 PostgreSQL 新时代。

【免费下载链接】pgrustPostgres rewritten in Rust, now faster than Postgres and Clickhouse项目地址: https://gitcode.com/GitHub_Trending/pg/pgrust

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考