Repolode
pgcentralfoundation

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. 1

    安装 cargo-pgrx 子命令

    cargo install --locked cargo-pgrx
  2. 2

    初始化 PGRX 主目录(会下载并编译支持的 PostgreSQL 版本)

    cargo pgrx init
  3. 3

    创建新的扩展项目

    cargo pgrx new my_extension
  4. 4

    在 psql 中运行示例扩展

    cargo pgrx run

使用前须知

  • 项目元数据中未明确许可证,使用前请先查看仓库的许可证。
  • init 步骤需要下载并编译多个 PostgreSQL 版本,耗时且占用磁盘空间。
  • 交叉编译仅在 nix 环境下演示过,其他环境需要手动配置。

收录于专题

标签

#postgres#postgresql#rust#database-extension#pg-extension#sql#postgresql-extension#rustlang

常见问题

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 数据每日更新。

相关项目