PostgreSQL RPM 仓库开始引入 Rust 扩展

2026-09-29 27 预计阅读时间: 1 分钟
来源: postgr.es AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:7 分钟

PostgreSQL RPM 仓库正在迎来一个重要变化:原本尽量避免引入 Rust 依赖的打包策略开始调整,pgrx 和 postgresql_anonymizer 已经进入 RPM 仓库,同时配套的 Rust 扩展打包指南也开始落地。

这意味着 PostgreSQL 扩展开发者可以更容易地把基于 Rust 的扩展交付给使用 RPM 系列发行版的用户。不过,当前支持的发行版范围仍然有限,升级和部署时需要确认平台版本是否在支持列表中。

为什么 Rust 扩展需要专门的打包规则

Rust 扩展与传统的 C 扩展在构建方式上不同。它们通常需要 Cargo、Rust 编译器以及一组 crates 依赖,构建过程还可能受到 Rust toolchain 版本、架构和发行版生命周期的影响。

对 PostgreSQL RPM 仓库来说,直接把 Rust 项目当作普通扩展处理,会带来几个实际问题:

  • 构建环境需要提供稳定且可复现的 Rust 依赖。
  • RPM 构建过程必须把编译产物安装到 PostgreSQL 期望的位置。
  • 不同 RHEL 兼容发行版的编译器和系统库版本可能不同。
  • 扩展包需要与对应的 PostgreSQL 主版本和系统架构匹配。

因此,这次变化不只是新增两个包,也包括围绕 pgrx 的打包规范。规范化之后,后续 Rust 扩展更容易遵循同一套构建和发布流程。

先确认平台,再安装扩展

摘要提到,当前支持的发行版范围存在限制,后续还计划增加 RHEL 10.3 和 9.9 支持。生产环境不应只根据包名判断是否可以安装,而要同时核对 PostgreSQL 版本、操作系统版本和架构。

可以先用下面的命令检查当前环境:

set -eu

printf 'OS: '
. /etc/os-release
printf '%s %s\n' "$ID" "$VERSION_ID"

printf 'Architecture: '
arch

printf 'PostgreSQL client: '
psql --version

printf 'Enabled PostgreSQL repositories:\n'
dnf repolist enabled | grep -i postgres || true

如果仓库已经配置完成,可以按实际包名安装对应扩展。下面的命令以 PostgreSQL 16 为例,包名和仓库名称应根据目标发行版及仓库实际内容调整:

sudo dnf install \
  pgrx_16 \
  postgresql_anonymizer_16

安装 RPM 并不等于扩展已经在数据库中启用。安装完成后,还需要在目标数据库中执行扩展初始化:

CREATE EXTENSION IF NOT EXISTS anon;

pgrx 更多时候是 Rust 扩展开发和构建生态的一部分,具体是否需要在运行时安装名为 pgrx 的数据库扩展,应以目标项目的安装说明和 RPM 内容为准。上面的包名是实践示例,不代表所有受支持平台都会使用完全相同的命名方式。

对扩展维护者的影响

对于维护 PostgreSQL Rust 扩展的团队,RPM 仓库开始接纳 Rust 包意味着发布流程需要更早考虑发行版兼容性。建议在项目中明确记录以下信息:

  • 支持的 PostgreSQL 主版本。
  • 支持的 RHEL 或兼容发行版版本。
  • Rust toolchain 和 Cargo 依赖要求。
  • 扩展 SQL 文件、共享库和控制文件的安装位置。
  • 是否需要额外的系统库或运行时依赖。

一个最小的构建检查脚本可以这样写,用来在 CI 中提前验证 Rust 和 PostgreSQL 环境:

#!/usr/bin/env bash
set -euo pipefail

: "${PG_CONFIG:=pg_config}"

command -v cargo >/dev/null || {
  echo "cargo is required" >&2
  exit 1
}

PG_VERSION="$($PG_CONFIG --version)"
RUST_VERSION="$(rustc --version)"

printf 'Building against %s\n' "$PG_VERSION"
printf 'Using %s\n' "$RUST_VERSION"

cargo build --release

这类检查不能替代完整的 RPM 构建,但能尽早暴露工具链缺失、pg_config 不在 PATH 中等问题。真正进入仓库构建时,还需要遵循 PostgreSQL RPM 仓库的 Rust 扩展打包指南,并在目标发行版上验证生成的 RPM。

采用时的检查清单

部署前可以逐项确认:

  • 当前发行版和版本是否属于已支持范围。
  • 仓库中是否提供目标 PostgreSQL 主版本的扩展包。
  • 包名、依赖和架构是否与环境匹配。
  • 是否在测试数据库中执行过 CREATE EXTENSION。
  • 升级 PostgreSQL 或操作系统时,是否重新验证 Rust 扩展。
  • 是否为扩展升级准备了回滚和备份方案。

Rust 扩展进入 PostgreSQL RPM 仓库,降低了用户从源码构建扩展的门槛,也让扩展维护者拥有更正式的分发路径。现阶段最重要的工作不是盲目升级,而是根据支持矩阵验证平台,并把扩展安装和数据库启用拆成两个独立步骤管理。


相关推荐