pig build
pig build 命令是一个强大的工具,简化了从源码构建 PostgreSQL 扩展的整个工作流程。它提供了完整的构建基础设施设置、依赖管理,以及标准和自定义 PostgreSQL 扩展在不同操作系统上的编译环境。
| 命令 | 描述 | 备注 |
|---|---|---|
build spec |
初始化构建规范目录 | |
build repo |
初始化所需仓库 | 需要 sudo 或 root 权限 |
build tool |
初始化构建工具 | 需要 sudo 或 root 权限 |
build rust |
安装 Rust 工具链 | 需要 sudo 或 root 权限 |
build pgrx |
安装并初始化 pgrx | 需要 sudo 或 root 权限 |
build proxy |
初始化构建代理 | 需要 sudo 或 root 权限 |
build get |
下载源代码 tarball | |
build dep |
安装扩展构建依赖 | 需要 sudo 或 root 权限 |
build ext |
构建扩展包 | 需要 sudo 或 root 权限 |
build pkg |
完整构建流程:get、dep、ext | 需要 sudo 或 root 权限 |
快速入门
设置构建环境并构建扩展的最快方式:
更精细的控制方式:
构建基础设施
目录结构
PIG 构建目录
~/ext/
- pkg/
- src/
- log/
- tmp/
~/rpmbuild/
- RPMS -> ~/ext/pkg
- SOURCES -> ~/ext/src
- SPECS/
- BUILD/
- BUILDROOT/
- SRPMS/
~/debbuild/
- DEBS -> ~/ext/pkg
- SOURCES -> ~/ext/src
- SPECS/
- BUILD/
~/ext/ 是真实工作目录:pkg 保存构建产物,src 保存源码压缩包,log / tmp 分别保存构建日志和临时文件;平台专用目录则把输出与源码位置链接回这里。
构建输出位置:
- EL 系统:
~/ext/pkg/,并通过~/rpmbuild/RPMS/软链接访问 - Debian 系统:
~/ext/pkg/,并通过~/debbuild/DEBS/软链接访问
build spec
设置构建规范与目录结构。
功能:
- 下载 RPM 或 DEB 构建规范 tarball
- 创建
~/ext/{pkg,src,log,tmp}与平台构建目录 - 将
RPMS/DEBS与SOURCES软链接到~/ext/pkg和~/ext/src - 通过增量
rsync同步 makefile、spec 与 Debian 打包文件
工作目录: 默认使用 ~/ext/ 保存源码、产物、日志与临时文件;平台打包目录为 ~/rpmbuild/ 或 ~/debbuild/。
build repo
初始化构建扩展所需的包仓库。
功能: 以 pig repo set -ru 初始化构建所需仓库:移除旧仓库、添加所需仓库并更新包缓存。--beta/-b 会把 beta 模块追加到仓库模块列表,用于显式构建 PostgreSQL 19 beta 相关包;稳定默认路径仍只使用 PG14-18。
选项:
-b|--beta:额外启用 PostgreSQL beta 仓库模块-m|--mirror:选择内置的china仓库定义
build tool
安装必要的开发工具和编译器。
工具包:
- 最小(
mini): GCC/Clang 编译器、Make 和通用构建必需品;不安装 PostgreSQL server/devel 包 - 默认 /
full: 编译器、开发库、打包工具(rpmbuild、dpkg-dev)以及稳定 PG14-18 构建依赖 --beta: 在默认工具集基础上额外安装 PG19 beta 的 server/devel 构建包
build rust
安装 Rust 编程语言工具链,基于 Rust 的扩展所需。
安装内容: Rust 编译器(rustc)、Cargo 包管理器、Rust 标准库、开发工具。-m|--mirror 会使用镜像模式,并为 Cargo 写入 rsproxy.cn 相关配置。
build pgrx
安装并初始化 PGRX(Rust 的 PostgreSQL 扩展框架)。
前提条件: 必须先安装 Rust 工具链、PostgreSQL 开发头文件。默认自动探测只覆盖稳定 PG14-18;需要 PG19 beta 时使用 -b|--beta,或通过 --pg 19 显式指定。
build proxy
为受限互联网访问的构建环境设置代理配置。
首次使用前,需要先配置一个提供 vray 的软件仓库,通常可运行 pig build repo(或使用等价的既有仓库配置)。
该命令通过 dnf、yum 或 apt-get 安装 vray,写入 /etc/v2ray.json 与
/etc/profile.d/proxy.sh,然后重启 v2ray 服务,因此需要 sudo 或 root 权限。
该软件包必须提供 v2ray 服务账户与 systemd unit。连通性检查失败时命令会返回非零退出状态。
远端用户 ID 应按凭据处理。PIG 会在诊断与结构化结果中遮盖它,但它仍作为命令参数传入, 可能被 shell 历史保留;调用方应遵循所在 shell 或自动化环境的凭据处理策略。
build get
下载扩展源代码 tarball。
pig build get 的参数是扩展名、包名或源码文件名;未知名称会按源码文件名处理。它不会把 all 或 std 展开为内置集合。需要批量下载时,请显式列出目标包名。
一些源码包并不直接对应扩展名,pig build get 内置了特殊 alias 以便直接下载源码。
当前常见的特殊源码 alias 包括:babelfishpg / babelfish、agensgraph / agentsgraph、oriolepg / orioledb、cloudberry、pgedge、pdu、pgdog、rdkit、onesparse、libfepgutils。
build dep
安装构建扩展所需的依赖。
选项:
--pg:指定一个或多个 PostgreSQL 大版本;未指定时按扩展元数据或本机安装自动推断
build ext
编译扩展并创建安装包。
选项:
--pg:指定一个或多个 PostgreSQL 大版本-s|--symbol:构建调试符号包(仅 RPM)
build pkg
执行完整的构建流程:下载、依赖和构建。
选项:
--pg:指定一个或多个 PostgreSQL 大版本-s|--symbol:构建调试符号包(仅 RPM)-m|--mirror:下载源码时优先使用pigsty.cc镜像
常见工作流
工作流 1:构建标准扩展
工作流 2:构建 Rust 扩展
工作流 3:构建多个版本
故障排除
找不到构建工具
缺少依赖
找不到 PostgreSQL 头文件
Rust/PGRX 问题
扩展构建矩阵
常见构建的扩展
| 扩展 | 类型 | 构建时间 | 复杂度 | 特殊要求 |
|---|---|---|---|---|
| pg_repack | C | 快速 | 简单 | 无 |
| pg_partman | SQL/PLPGSQL | 快速 | 简单 | 无 |
| citus | C | 中等 | 中等 | 无 |
| timescaledb | C | 慢 | 复杂 | CMake |
| postgis | C | 非常慢 | 复杂 | GDAL、GEOS、Proj |
| pg_duckdb | C++ | 中等 | 中等 | C++17 编译器 |
| pgroonga | C | 中等 | 中等 | Groonga 库 |
| pgvector | C | 快速 | 简单 | 无 |
| plpython3 | C | 中等 | 中等 | Python 开发 |
| pgrx 扩展 | Rust | 慢 | 复杂 | Rust、PGRX |