一款 PostgreSQL 扩展,用于对时序和事件数据进行高性能实时分析。
pgcentralfoundation/pgrx
用 Rust 开发 PostgreSQL 扩展的框架,提供从初始化、运行到测试与打包的完整工具链。
- Star
- 4,823
- Fork
- 342
- 未关闭 Issue
- 343
- 最近提交
- 8天前
这是什么?
pgrx 是一个用 Rust 编写 PostgreSQL 扩展的框架。它把 Rust 函数、类型和枚举映射为 Postgres 对象,并自动生成对应的 SQL schema,因此扩展可以完全用 Rust 实现,同时向 SQL 暴露函数和自定义类型。
cargo-pgrx 子命令负责开发流程:创建新的扩展项目、下载并编译 Postgres 版本、启动加载了扩展的 psql 会话、跨多个 Postgres 版本运行测试,以及生成安装包。项目基于同一份代码支持 Postgres 13 至 18,并提供 19 的 beta 版本。
框架注重安全性:Rust 的 panic 会被转换为 Postgres 错误并终止当前事务而非整个进程,内存管理遵循 Rust 的 drop 语义。此外还提供 SPI、内存上下文、钩子以及底层 pg_sys 绑定,便于进行更底层的开发。
核心功能
- 01通过 cargo-pgrx 命令创建、运行、测试和打包扩展
- 02基于同一份代码支持 Postgres 13 至 18
- 03通过 #[pg_extern] 等注解自动生成 SQL schema
- 04使用派生宏定义自定义 Postgres 类型和枚举
- 05Rust panic 转换为 Postgres 错误,只中止当前事务
- 06可访问 SPI、内存上下文、钩子以及底层 pg_sys 接口
适用场景
- 用 Rust 编写自定义 Postgres 数据类型或相关函数
- 将 Rust 库封装为 PostgreSQL 扩展,供 SQL 查询调用
- 在 CI 中针对多个 Postgres 主版本测试扩展
快速上手
- 1
安装 cargo-pgrx 子命令
cargo install --locked cargo-pgrx - 2
初始化 PGRX 主目录(会下载并编译支持的 PostgreSQL 版本)
cargo pgrx init - 3
创建新的扩展项目
cargo pgrx new my_extension - 4
在 psql 中运行示例扩展
cargo pgrx run
使用前须知
- 项目元数据中未明确许可证,使用前请先查看仓库的许可证。
- init 步骤需要下载并编译多个 PostgreSQL 版本,耗时且占用磁盘空间。
- 交叉编译仅在 nix 环境下演示过,其他环境需要手动配置。
收录于专题
标签
常见问题
- pgrx 是什么?
- 用 Rust 开发 PostgreSQL 扩展的框架,提供从初始化、运行到测试与打包的完整工具链。 pgrx 是一个用 Rust 编写 PostgreSQL 扩展的框架。它把 Rust 函数、类型和枚举映射为 Postgres 对象,并自动生成对应的 SQL schema,因此扩展可以完全用 Rust 实现,同时向 SQL 暴露函数和自定义类型。
- pgrx 可以免费使用吗?用的什么许可证?
- pgrx 以 Other 许可证开源。用于商业产品前,请先确认许可证条款。
- pgrx 还在维护吗?
- 活跃维护中。pgrx 最近一次提交是在 2026年10月30日。
- pgrx 适合用来做什么?
- 用 Rust 编写自定义 Postgres 数据类型或相关函数 将 Rust 库封装为 PostgreSQL 扩展,供 SQL 查询调用 在 CI 中针对多个 Postgres 主版本测试扩展
- pgrx 怎么安装和运行?
- 安装 cargo-pgrx 子命令: cargo install --locked cargo-pgrx 初始化 PGRX 主目录(会下载并编译支持的 PostgreSQL 版本): cargo pgrx init 创建新的扩展项目: cargo pgrx new my_extension 在 psql 中运行示例扩展: cargo pgrx run
- 在哪里获取 pgrx?
- 源代码和安装说明在 GitHub 上:https://github.com/pgcentralfoundation/pgrx
概要由 AI 根据项目 README 生成;GitHub 数据每日更新。
相关项目
2.4万+40 本周1184COther更新于 18小时前
面向 Node.js 的非阻塞 PostgreSQL 客户端,提供纯 JavaScript 驱动与可选的原生 libpq 绑定。
1.3万+1 本周1384JavaScriptMIT更新于 15天前
一款带自动补全和语法高亮的 Postgres 命令行客户端,可替代原生 psql。
1.3万+6 本周618PythonBSD-3-Clause维护活跃更新于 3天前
一份社区维护的 PostgreSQL 软件、库、工具、扩展与学习资源精选清单。
1.2万+13 本周1076CC0-1.0更新于 前天
用 Rust 编写的进程内 SQL 数据库,兼容 SQLite,并提供实验性的 Postgres 接口。
2.5万+86 本周1530RustMIT维护活跃更新于 16小时前