📌 项目地址malisper/pgrust | ⭐ 1,927 颗星 | 🔧 Rust | 📜 未标注

这个项目要解决什么问题?

PostgreSQL 版本迭代多年,内核用 C 语言编写,修改和扩展的难度越来越高。pgrust 的目标是用 Rust 重新实现 PostgreSQL,保持与原生 Postgres 的行为兼容、磁盘格式兼容,从而让开发者可以更容易地从内部改造 Postgres。它的核心理念是:

  • 保留 Postgres 的行为(以官方回归测试为 oracle)
  • 用 Rust + AI 辅助编程探索更深层的变化
  • 逐步替换 C 实现,最终让 Postgres 变得更容易改进

目前 pgrust 已完成对 Postgres 18.3 的兼容,并通过了超过 46,000 条回归查询。它可以直接挂载一个现有的 Postgres 18.3 数据目录启动,这意味着迁移成本极低。

快速上手:Docker 运行

Docker 镜像是目前最简单的尝试方式。以下命令来自 README 原文,会自动启动容器、等待初始化完成,然后进入 psql 交互:

docker run -d --name pgrust -e POSTGRES_PASSWORD=secret malisper/pgrust:v0.1 
  && until docker exec -e PGPASSWORD=secret pgrust psql -h 127.0.0.1 -U postgres -c 'q' >/dev/null 2>&1; do sleep 1; done 
  && docker exec -it -e PGPASSWORD=secret pgrust psql -h 127.0.0.1 -U postgres; docker rm -f pgrust

注意:malisper/pgrust:latest 当前与 v0.1 指向同一发布版本,建议使用 v0.1 固定版本。

运行后,你可以像使用普通 PostgreSQL 一样执行 SQL 命令。但需要注意,pgrust 目前尚未进行性能优化,也未达到生产就绪状态

从源码构建

如果你在 macOS 或 Debian/Ubuntu 上,可以按以下步骤编译:

macOS 依赖

brew install icu4c openssl@3 libpq

export LIBRARY_PATH="$(brew --prefix openssl@3)/lib:${LIBRARY_PATH:-}"
export PKG_CONFIG_PATH="$(brew --prefix openssl@3)/lib/pkgconfig:$(brew --prefix icu4c)/lib/pkgconfig:${PKG_CONFIG_PATH:-}"
export PATH="$(brew --prefix libpq)/bin:$PATH"

Debian/Ubuntu 依赖

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

构建命令

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

注意:README 原文使用了 --bi 参数,这很可能是 --bin 的笔误(cargo 没有 --bi 选项)。在实际构建时,建议替换为 --bin pgrust 或查看项目最新文档确认。

和同类工具/方案的区别

目前市场上存在多个用 Rust 重写数据库的项目(如 Materialize、RisingWave、CockroachDB 等),但它们大多是从零打造的新数据库,与 PostgreSQL 的兼容性有限。pgrust 的独特之处在于:

  • 磁盘格式完全兼容:可直接挂载 Postgres 18.3 数据目录,无需数据迁移。
  • 以官方回归测试为正确性标准:通过 100% 回归测试意味着绝大多数 SQL 行为与原生 Postgres 一致。
  • 目标并非简单替换:而是利用 Rust 的安全性和 AI 辅助编程,探索 Postgres 难以实现的新特性,例如多线程内部、内置连接池、无 vacuum 存储等。

相比之下,其他 Rust 数据库通常更侧重于分布式、实时分析或云原生场景,而非成为“更好的 PostgreSQL”。

需要特别注意的局限性

  1. 不是生产就绪:性能尚未优化,官方明确表示 “not performance optimized yet”。
  2. 扩展兼容性差:现有的 Postgres 扩展(如 PL/Python、PL/Perl、PL/Tcl)以及部分 contrib 模块尚未兼容。虽然部分内置模块已移植,但广度有限。
  3. 新版本路线图中的特性:README 提到正在开发一个未发布的新版本,该版本采用每连接单线程模型、事务负载快 50%、分析负载比 Postgres 快约 300 倍(但比 Clickhouse 慢 2 倍)。这些数据来自团队声明,尚未公开验证。
  4. 构建工具链:编译需要依赖 Postgres 18.3 的 share 目录(PGRUST_PGSHAREDIR 环境变量),这在 macOS 和 Linux 上可能需要手动配置。

适合谁关注?

  • 对 Postgres 内核感兴趣、想参与开源贡献的 Rust 开发者——pgrust 可能是未来改造 Postgres 的起点。
  • 关注数据库深度优化的 DBA 或基础设施工程师——了解其多线程、无 vacuum 等设计思路,可提前评估未来对现有 Postgres 集群的潜在影响。
  • 希望减少 C 语言维护成本、但不想放弃 Postgres 生态的团队——如果 pgrust 持续发展,未来可能作为 Postgres 的一个替代实现。

如果你只是需要一个稳定、高性能的 PostgreSQL 实例,请继续使用官方的 PostgreSQL 18.3。pgrust 目前更适合尝鲜和技术探索。

更多信息可访问 pgrust.com 的浏览器 demo,或加入 Discord 讨论。

这篇文章对你有帮助吗?

发表回复