📌 项目地址: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”。
需要特别注意的局限性
- 不是生产就绪:性能尚未优化,官方明确表示 “not performance optimized yet”。
- 扩展兼容性差:现有的 Postgres 扩展(如 PL/Python、PL/Perl、PL/Tcl)以及部分 contrib 模块尚未兼容。虽然部分内置模块已移植,但广度有限。
- 新版本路线图中的特性:README 提到正在开发一个未发布的新版本,该版本采用每连接单线程模型、事务负载快 50%、分析负载比 Postgres 快约 300 倍(但比 Clickhouse 慢 2 倍)。这些数据来自团队声明,尚未公开验证。
- 构建工具链:编译需要依赖 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 讨论。