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 | 设置 Xray 客户端与服务端 | Linux:root;macOS 客户端:普通用户 |
build get | 下载源代码 tarball | |
build dep | 安装扩展构建依赖 | 需要 sudo 或 root 权限 |
build ext | 构建扩展包 | 需要 sudo 或 root 权限 |
build pkg | 完整构建流程:get、dep、ext | 需要 sudo 或 root 权限 |
快速入门
设置构建环境并构建扩展的最快方式:
更精细的控制方式:
构建基础设施
目录结构
构建输出位置:
- 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
为互联网访问受限的构建环境设置 Xray 客户端与服务端,保留 x 别名。
不带参数的 pig build proxy 只安装或确认 Xray。
客户端与服务端角色命令从 PIG v1.9.0 起提供。
协议与迁移契约参见 Xray 设计记录。
客户端
一行命令按需安装 Xray、写入客户端配置、启动服务,并分别检查 HTTP 与 SOCKS 的 HTTPS 请求。
首次监听默认使用 127.0.0.1:12345,同一端口提供 HTTP 和 SOCKS。
已有受支持客户端省略 --listen 时保留原监听地址。
协议采用 VLESS、RAW/TCP、REALITY 与 xtls-rprx-vision,使用 Chrome 指纹并禁用 mux。
连接输入三选一:位置参数 URI、直接连接参数,或 --from FILE/-。
client.uri 只是包含一条标准 vless:// URI 的文本文件,可以有末尾换行,文件名任意。
--from - 从标准输入读取,不能混用不同输入方式。
服务端启用 ML-DSA-65 时,--pqv 提供验证密钥。
不支持的传输、重复 URI 参数及有歧义的输入会在设置前被拒绝。
Linux 需要 root 或 sudo、运行中的 systemd,以及已配置的 Pigsty xray 软件仓库,
例如先运行 sudo pig repo add infra -u。
配置使用 /etc/xray.json,权限 0640、所有者 root:xray;服务使用 xray 账户及 PIG 管理的 systemd drop-in。
macOS 使用普通用户运行,需要已有 Homebrew;配置使用 ~/.config/xray/pig-proxy.json,
权限 0600,服务由独立的 com.pigsty.xray-proxy LaunchAgent 管理。
已有服务端可以直接把连接流入客户端设置。两端需要使用包含新增命令的 PIG 构建:
输入、文件归属、权限与服务状态均匹配时,重复设置不改写文件或重启服务。
受管理文件归属错误时会修复归属,不改变连接凭据。
替换不同或不支持的已有客户端配置需要 --replace --yes;--plan 只预览,不安装、写文件或更改服务。
设置会通过两个代理协议访问 https://www.google.com/generate_204,要求返回 HTTP 204,
因此服务端必须能访问这个外网端点。检查失败时返回非零,并恢复原有受管理文件与服务状态;
已经安装的软件包可能保留。
生成的 Shell 文件提供 po、px、pck。在当前 Shell 中启用代理变量:
服务端
服务端设置支持 Linux,需要相同的软件包、root 与 systemd 条件。
必须提供公网发布地址 --host 与 REALITY 伪装目标 --target host:port。
首次直连默认监听 0.0.0.0:443;--port 改变发布的公网端口及首次直连监听端口,
--listen 可指定独立的绑定地址。target 必须支持 TLS 1.3 与 HTTP/2。
首次设置生成 UUID、X25519 密钥对、short ID,以及 ML-DSA-65 seed 和验证密钥。
SNI 默认取 target 主机名。重复设置保留全部认证字段、SNI 与协议设置;省略 --listen 时
保留已有监听地址。配置、文件归属、权限和服务状态已经匹配时,不重写、不重启。
相同 --host 与 --port 导出相同的规范 URI。
target/SNI 冲突、已有材料损坏或有歧义时直接拒绝,不静默轮换凭据;不支持的已有服务端配置也会被拒绝。
--export-only 必须指定 --export,不安装、不修改配置、不启动、重启或启用服务。
它在进程内从现有私密材料推导客户端验证信息。
要求受支持的 VLESS/REALITY inbound、账户、SNI 与 short ID 各自唯一明确。
--host 与 --port 描述外部入口,不从 9443 等后端端口推断公网端口。
只读模式不能与设置参数混用。
--export FILE 写入权限 0600,不含服务端私钥或 seed。
重复导出相同内容时不重写文件;已有文件内容不同时拒绝覆盖。
--export - 显式向标准输出写一条完整凭据 URI,诊断写入标准错误。
导出要求文本输出,不能与 JSON/YAML 混用;普通输出与计划不包含凭据。
整个 URI 和直接认证参数都应按凭据处理,文件或标准输入可避免将它们保留为 Shell 参数。
服务端成功只证明本机监听和服务就绪,公网可达性仍需要真实客户端请求确认。
PIG 不设置 Nginx、防火墙或云安全组;--proxy-protocol 要求回环绑定与已有可信前端。
端口冲突时失败,不停止其他服务,也不自动停止或删除已有 V2Ray。
历史 VMess 形式
历史位置参数语法继续保留 V2Ray/VMess 行为,首次客户端端口仍为 12345:
这个 Linux 兼容路径仍需要提供 vray 的仓库,写入 /etc/v2ray.json 与 /etc/profile.d/proxy.sh,
并重启 v2ray。需要 root 或 sudo;HTTPS 检查失败时返回非零。
远端用户 ID 属于凭据,普通结果会脱敏。
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
编译扩展并创建安装包。
调试包默认启用。包含编译产物的 RPM 构建通常会额外生成 debuginfo 与 debugsource,
基于 Debhelper 的构建通常会额外生成 dbgsym。纯 SQL、架构无关或采用特殊配方的包可能没有
可拆分的调试内容;包配方也可以做更窄的显式选择,PIG 不会改写 spec 或 debian/rules。
选项:
--pg:指定一个或多个 PostgreSQL 大版本--nodbg:在 RPM 构建中禁用自动debuginfo/debugsource包,在 DEB 构建中禁用dbgsym包
build pkg
执行完整的构建流程:下载、依赖和构建。
选项:
--pg:指定一个或多个 PostgreSQL 大版本--nodbg:在 RPM 构建中禁用自动debuginfo/debugsource包,在 DEB 构建中禁用dbgsym包-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 |
这个页面对您有帮助吗?
感谢反馈,我们会据此改进这篇文档。
哪里没有解决?(可选)