malisper/pgrust

GitHub: malisper/pgrust

用 Rust 重写 PostgreSQL 内核的实验性项目,已 100% 通过 Postgres 回归测试,探索多线程架构与性能优化。

Stars: 2953 | Forks: 88

pgrust

用 Rust 重写的 Postgres。

Postgres 18.3 Regression queries: 46k+ License: AGPL-3.0

浏览器演示   |   Discord   |   获取 pgrust 更新   |   问题

pgrust 的目标是与 Postgres 18.3 兼容,并在超过 46,000 个回归测试查询中与 Postgres 的预期输出保持一致。 pgrust 在磁盘层面与 Postgres 兼容,并且可以从现有的 Postgres 18.3 数据目录启动。 其目的是让 Postgres 更容易从内部进行修改:保持行为与 Postgres 一致,将真正的 Postgres 测试作为标准,并使用 Rust 加上 AI 辅助编程来探索更深层次的服务器变更。 更新:我们正在开发一个尚未发布的新版 pgrust,它目前通过了 100% 的 Postgres 回归测试套件,采用每个连接一个线程的模型取代了每个连接一个进程的模型,在事务工作负载上比 Postgres 快 50%,在分析工作负载上比 Postgres 快约 300 倍(在 clickbench 上比 Clickhouse 慢 2 倍,我们认为它可以变得比 Clickhouse 更快)。关注 pgrust 或加入我们的 Discord 以获取更新! ## 状态 pgrust 尚未达到生产可用状态,也尚未进行性能优化。 现有的 Postgres 扩展和过程语言扩展(如 PL/Python、PL/Perl 和 PL/Tcl)暂时还不具备普遍的兼容性。一些内置的 contrib 模块已经完成了移植,随着时间的推移,未来可能会实现更多的兼容性。 ## 路线图 - 多线程的 Postgres 内部实现 - 内置连接池 - 更好的重 JSON 工作负载支持 - 快速分叉与分支工作流 - 存储实验,包括无 vacuum 设计 - 针对劣质查询和 AI 生成 SQL 的运行时防护机制 - 减少突发的执行计划劣化切换 ## 试用 请在 https://pgrust.com 试用 WebAssembly 演示。 Docker: ``` 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 ``` 这里使用的是 Docker 镜像内部的 `psql` 客户端。 `malisper/pgrust:latest` 目前指向相同的发布版本,但 `v0.1` 是锁定的首发镜像。 ## 从源码构建 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 --bin postgres ``` 创建数据目录: ``` target/release/postgres --initdb \ -D /tmp/pgrust-data \ -L "$PWD/vendor/postgres-18.3/share" \ --no-locale \ --encoding UTF8 \ -U postgres ``` 运行 pgrust: ``` 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 version(), 1 + 1 as two" ``` ## 回归测试 针对 pgrust 运行 Postgres 回归测试: ``` PGRUST_BIN="$PWD/target/release/postgres" \ scripts/run-regression ``` 运行器使用 pgrust 自带的 `--initdb` 以及本仓库中内置的 Postgres 18.3 测试文件。它需要 `PATH` 中存在 Postgres 18 的 `psql` 客户端;如果 `psql` 在其他位置,请设置 `PGRUST_PSQL=/path/to/psql`。 已验证的首发结果:pgrust 在超过 46,000 个回归测试查询中与 Postgres 的预期输出保持一致。 ## 历史 本仓库现在包含了达到回归测试里程碑的较新 pgrust 实现。 早期的公开实现已归档于 `archive/pre-fabled-2026-06-23`。 背景信息: - pgrust 最初发布:https://malisper.me/pgrust-rebuilding-postgres-in-rust-with-ai/ - 67% 回归测试更新:https://malisper.me/pgrust-update-at-67-postgres-compatibility-and-accelerating/ - “四骑士”路线图:https://malisper.me/the-four-horsemen-behind-thousands-of-postgres-outages/ ## 反馈 如果出现问题、安装配置令人困惑,或者您有希望优先看到的 Postgres 改进,请提交一个 issue。 ## 联系方式 - 电子邮件:maintainers@pgrust.com - Discord:https://discord.gg/FZZ4dbdvwU - 项目更新:https://pgrust.com/#updates ## 许可证 pgrust 基于 AGPL-3.0 许可证授权。详见 `LICENSE`。
标签:AI工具, OLAP, OLTP, PostgreSQL, Rust, 关系型数据库, 可视化界面, 数据库, 测试用例, 网络流量审计, 请求拦截, 通知系统