news 2026/8/16 20:56:43

pgrust 兼容性完全指南:哪些 PostgreSQL 特性已完整支持?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
pgrust 兼容性完全指南:哪些 PostgreSQL 特性已完整支持?

pgrust 兼容性完全指南:哪些 PostgreSQL 特性已完整支持?

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

pgrust 兼容性是许多数据库开发者和 DBA 关注的重点——这款用 Rust 重写 PostgreSQL 的开源项目,宣称兼容 PostgreSQL 18.3,并通过了超过 46,000 条回归测试。本文作为一份 pgrust 兼容性完全指南,将带你逐项盘点:哪些 PostgreSQL 特性已被完整支持、哪些仍有差距,以及如何快速验证兼容性。

pgrust 是什么?为什么兼容性如此关键?

pgrust 是一个用 Rust 语言重写 PostgreSQL 的开源项目,目标是"从内部让 Postgres 更容易改变":保持 Postgres 的行为形状,以真实的 Postgres 测试作为判定基准,借助 Rust 与 AI 辅助编程探索更深层的服务器改造。

兼容性是这个项目的生命线。正因为兼容,pgrust 才能直接从现有的 PostgreSQL 18.3 数据目录启动,无需迁移数据;正因为兼容,它才能跑通 Postgres 官方回归测试套件,成为可信的替代品。

兼容性里程碑一览

里程碑状态
目标版本PostgreSQL 18.3
已发布版本回归测试超过 46,000 条查询输出一致
新版本(未发布)回归套件100% 通过 Postgres 回归套件
磁盘格式与 Postgres 完全兼容(disk compatible)
现有数据目录可直接启动,无需转换

已完整支持的 PostgreSQL 核心特性

1. SQL 语法与类型系统 🧱

pgrust 移植了 Postgres 的完整 SQL 解析与执行链路。解析器、分析器、规划器、执行器四大核心全部就位,你可以放心使用复杂的 SQL 语法、子查询、CTE、窗口函数与聚合。

  • 解析器与语法分析:crates/backend/parser/
  • 查询规划与优化:crates/backend/optimizer/
  • 执行器与表达式求值:crates/backend/executor/

2. 数据类型支持 📦

Postgres 丰富的内置类型体系在 pgrust 中均有对应移植,涵盖数值、文本、日期时间、JSON/JSONB、网络类型、几何类型、范围类型等。

  • 基础类型与 datum 表示:crates/_support/types/
  • 数据类型的完整实现:crates/backend/utils/adt/

3. 索引与访问方法 ⚡

这是查询性能的基石。pgrust 已支持 Postgres 的多种索引类型和存储访问方法:

  • B-tree 索引:crates/backend/access/nbtree/
  • Hash 索引:crates/backend/access/hash/
  • GiST 索引:crates/backend/access/gist/
  • GIN 索引(全文搜索、JSONB 索引的底层):crates/backend/access/gin/
  • SP-GiST 索引:crates/backend/access/spgist/
  • BRIN 索引:crates/backend/access/brin/
  • 堆表存储与并发控制:crates/backend/access/heap/

4. 事务、WAL 与复制 🔄

数据库可靠性的关键特性同样被覆盖:

  • WAL 日志与崩溃恢复:crates/backend/access/transam/
  • 流复制与逻辑复制:crates/backend/replication/
  • 两阶段提交(2PC)、多版本并发控制(MVCC)

5. 分区表与并行查询 🚀

  • 表分区:crates/backend/partitioning/
  • 并行执行与并行查询:crates/backend/executor/

磁盘级兼容:无缝切换的秘密武器

pgrust 最令人惊艳的一点是磁盘格式与 Postgres 完全兼容。这意味着:

  1. 你可以用一个现有的 PostgreSQL 18.3 数据目录直接启动 pgrust;
  2. 数据文件、WAL、目录结构无需任何转换;
  3. 升级路径平滑,可以先备份、再切换,甚至随时切回。

这一点在 README.md 中有明确说明,也是 pgrust 与其它数据库重写项目最大的差异化优势。

内置扩展兼容性:已移植的 contrib 模块

虽然"外部扩展"目前还不能通用,但一批官方 contrib 模块已经被移植到 Rust,开箱即用:

扩展说明
hstorekey-value 存储类型
ltree树形路径类型
citext大小写不敏感的文本类型
pg_trgm模糊匹配与相似度搜索
pg_stat_statementsSQL 语句性能统计
pgcrypto加密函数库
uuid_osspUUID 生成
amcheck索引完整性校验
pg_prewarm数据预热

性能表现:比 Postgres 快多少?

根据项目公布的最新进展,正在开发中的新版本不仅实现了 100% 回归套件通过,性能上也大幅领先:

  • 🏦事务型负载:比 Postgres 快约 50%;
  • 📊分析型负载:比 Postgres 快约 300 倍,在 clickbench 上仅比 ClickHouse 慢 2 倍,且团队认为还有继续超越的空间;
  • 🧵并发模型:采用"每连接一线程"(thread per connection)替代 Postgres 传统的"每连接一进程"模型,为内置连接池等新特性铺路。

注意:当前已发布的 v0.1 版本尚未做性能优化,上述数据来自未发布的新版本。

尚未支持的 PostgreSQL 特性(兼容性边界)

作为一份诚实的兼容性指南,也必须说明当前短板:

  • 过程语言扩展:PL/Python、PL/Perl、PL/Tcl 等暂不兼容;
  • 通用外部扩展:绝大多数第三方 Postgres 扩展还无法加载;
  • 密码认证:密码认证相关的 seam 尚未移植,TCP 连接目前只能使用 trust 方式(本地 unix socket 不受影响),详见 docker/entrypoint.sh 中的说明;
  • ⚠️生产就绪度:项目明确标注"not production-ready yet",生产环境使用需谨慎。

如何快速验证 pgrust 兼容性?

方法一:Docker 一键体验 🐳

最快的方式是使用官方镜像,用法与官方 postgres 镜像几乎一致:

docker run -d --name pgrust -e POSTGRES_PASSWORD=secret malisper/pgrust:v0.1 psql -h 127.0.0.1 -U postgres -c "select version(), 1 + 1 as two"

镜像支持POSTGRES_USERPOSTGRES_PASSWORDPOSTGRES_DBPGDATA等标准环境变量,以及/docker-entrypoint-initdb.d初始化脚本目录,详细说明见 docker/README.md。

方法二:从源码构建 🔨

# 安装依赖后(libicu-dev libssl-dev 等) 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

方法三:跑官方回归测试 ✅

这是验证兼容性最权威的方式——直接用 Postgres 18.3 的官方测试文件检验 pgrust:

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

回归测试的运行机制可参考 scripts/ 目录下的 run-regression 与 run-pg-regress 脚本。

路线图:兼容性之后还有什么?

兼容性只是起点,pgrust 的路线图还包括:

  • 多线程 Postgres 内核;
  • 内置连接池;
  • 更好的 JSON 密集工作负载支持;
  • 快速分支与分支切换工作流;
  • 存储实验(包括无 vacuum 设计);
  • 针对坏查询和 AI 生成 SQL 的运行时护栏。

总结

pgrust 的兼容性已经达到了一个令人惊叹的高度:46,000+ 回归查询、磁盘级兼容、官方回归套件 100% 通过,这意味着绝大多数日常 SQL、索引、事务、复制场景都可以在 pgrust 上无缝运行。虽然外部扩展、过程语言和密码认证仍有待完善,但作为"更快、更易改造的 Postgres",pgrust 值得每一位关注数据库未来的开发者持续跟踪。

如果你打算深入源码研究其实现,可以从 Cargo.toml 的工作区成员清单出发,按 crates/backend/ 的目录结构逐模块探索——这就是一本地地道道的"Rust 版 Postgres 源码地图"。

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/16 20:41:26

实战:用 memleax 揪出 C 程序内存泄漏的 4 个真实案例

实战:用 memleax 揪出 C 程序内存泄漏的 4 个真实案例 【免费下载链接】memleax debugs memory leak of running process. Not maintained anymore, try libleak please. 项目地址: https://gitcode.com/gh_mirrors/me/memleax C 程序的内存泄漏(…

作者头像 李华
网站建设 2026/8/16 20:37:51

实战演练:用 readme-checklist 把一份糟糕的README改写成爆款文档

实战演练:用 readme-checklist 把一份糟糕的README改写成爆款文档 【免费下载链接】readme-checklist A checklist for writing READMEs 项目地址: https://gitcode.com/gh_mirrors/re/readme-checklist README 写不好,项目再牛也容易被埋没。rea…

作者头像 李华
网站建设 2026/8/16 20:35:13

Linux服务自启动实战:从systemd单元文件到生产环境部署

1. 从一次深夜告警说起:为什么服务自启动不是小事凌晨三点,手机突然震动,监控告警显示线上某个关键的数据处理服务挂了。你睡眼惺忪地爬起来,连上服务器,敲下systemctl start your-service,服务恢复了。但问…

作者头像 李华
网站建设 2026/8/16 20:32:29

pandastable绘图样式定制:打造专业级数据可视化的5个技巧

pandastable绘图样式定制:打造专业级数据可视化的5个技巧 【免费下载链接】pandastable Table analysis in Tkinter using pandas DataFrames. 项目地址: https://gitcode.com/gh_mirrors/pa/pandastable pandastable 是一款基于 Tkinter 的表格组件&#xf…

作者头像 李华