扩展构建:build
如何使用 pig build 命令构建 PostgreSQL 扩展并准备构建环境?
Module:
pig build
是一个强大的命令行工具,它简化了构建和管理 PostgreSQL 扩展的整个工作流程 - 从设置构建环境到跨不同操作系统编译扩展。
概述
Build Postgres Extension
Usage:
pig build [command]
Aliases:
build, b
Examples:
pig build - Build Postgres Extension
pig build repo # init build repo (=repo set -ru)
pig build tool [mini|full|...] # init build toolset
pig build proxy [id@host:port ] # init build proxy (optional)
pig build rust [-v <pgrx_ver>] # init rustc & pgrx (0.12.9)
pig build spec # init build spec repo
pig build get [all|std|..] # get ext code tarball with prefixes
pig build ext [extname...] # build extension
Available Commands:
ext Build extension
get Download source code tarball
proxy Initialize build proxy
repo Initialize required repos
rust Initialize rust and pgrx environment
spec Initialize building spec repo
tool Initialize build tools
Flags:
-h, --help help for build
Global Flags:
--debug enable debug mode
-i, --inventory string config inventory path
--log-level string log level: debug, info, warn, error, fatal, panic (default "info")
--log-path string log file path, terminal by default
示例
设置构建环境:
# 初始化仓库和工具
pig build repo
pig build tool
pig build spec
# 对于基于 Rust 的扩展
pig build rust
# 下载标准扩展
pig build get std # 下载所有压缩包
pig build get citus timescaledb # 下载特定压缩包
# 构建特定扩展
pig build ext citus
构建工作流
使用 pig build
构建 PostgreSQL 扩展的典型工作流程:
- 设置仓库:
pig build repo
- 安装构建工具:
pig build tool
- (可选) 设置代理:
pig build proxy id@host:port
- (可选,用于 Rust 扩展) 设置 Rust:
pig build rust
- 初始化构建规范:
pig build spec
- 下载源代码:
pig build get [prefixes]
- 构建扩展:
pig build ext [extname...]
注意事项
- EL 和 DEB 系统的构建过程有所不同
- 某些命令可能需要 sudo 权限来安装系统包
- 对于基于 Rust 的扩展,需要先设置 Rust 环境
- 代理设置是可选的,仅在网络访问受限的环境中需要
操作系统支持
pig build
命令支持:
- EL 发行版: RHEL, Rocky, CentOS (在版本 8 和 9 上测试通过)
- DEB 发行版: Debian (在版本 12 上测试通过), Ubuntu (在版本 22.04 和 24.04 上测试通过)
- 未来可能通过 homebrew 支持 MacOS
build repo
别名: r
通过运行带有更新和移除标志的仓库添加命令,添加构建 PostgreSQL 扩展所需的上游仓库。
pig build repo
build tool
别名: t
安装编译 PostgreSQL 扩展所需的构建工具。
pig build tool
参数:
mode
: 安装模式 (默认: “mini”)- 可用模式取决于操作系统和发行版
此命令安装必要的构建依赖,包括:
对于 EL 发行版 (RHEL, Rocky, CentOS):
make, cmake, ninja-build, pkg-config, lld, git, lz4, unzip, ncdu, rsync, vray,
rpmdevtools, dnf-utils, pgdg-srpm-macros, postgresql1*-devel, postgresql1*-server, jq,
readline-devel, zlib-devel, libxml2-devel, lz4-devel, libzstd-devel, krb5-devel,
对于 DEB 发行版 (Debian, Ubuntu):
make, cmake, ninja-build, pkg-config, lld, git, lz4, unzip, ncdu, rsync, vray,
debhelper, devscripts, fakeroot, postgresql-all, postgresql-server-dev-all, jq,
libreadline-dev, zlib1g-dev, libxml2-dev, liblz4-dev, libzstd-dev, libkrb5-dev,
build rust
别名: rs
设置用于构建 PostgreSQL Rust 扩展的 Rust 环境和 PGRX。
pig build rust [-v <pgrx_ver>]
参数:
-v <pgrx_ver>
: 要安装的 PGRX 版本 (默认: “0.12.9
”)
此命令:
- 如果尚未安装,则使用 rustup 安装 Rust
- 安装指定版本的 cargo-pgrx
- 使用适当的 PostgreSQL 配置(版本 13-17)初始化 PGRX
build spec
别名: s
根据操作系统初始化构建规范仓库:
pig build spec
-
对于 EL 发行版 (RHEL, Rocky, CentOS):
- 从 GitHub 克隆 RPM 规范仓库
- 在
~/rpmbuild
上设置 RPM 构建文件层次结构
-
对于 DEB 发行版 (Debian, Ubuntu):
- 从 GitHub 克隆 DEB 规范仓库
- 在
~/deb
上设置构建目录文件层次结构
该仓库包含 PIGSTY 维护的扩展的构建规范(rpmspecs 或 debian control 文件)。
build get
别名: get
下载 PostgreSQL 扩展的源代码压缩包。
pig build get [prefixes|all|std]
参数:
std
: 下载标准包(不包括大型包,默认行为)all
: 下载所有可用的源代码压缩包(用于批量构建)[prefixes]
: 一个或多个用于过滤要下载的包的前缀
下载的文件存储在:
- EL:
~/rpmbuild/SOURCES/
- DEB:
~/deb/tarball/
示例:
pig build get std # 获取标准包(除了 pg_duckdb/pg_mooncake/omnigres/plv8,太大了)
pig build get all # 获取所有可用的源代码压缩包
pig build get pg_mooncake # 获取 pg_mooncake 源代码
pig build get pg_duckdb # 获取 pg_duckdb 源代码
pig build get omnigres # 获取 omnigres 源代码
pig build get plv8 # 获取 plv8 源代码
pig build get citus # 获取 citus 源代码
pig build get timescaledb # 获取 timescaledb 源代码
pig build get hydra # 获取 hydra 源代码
pig build get pgjwt # 获取 pgjwt 源代码
....
build ext
别名: e
使用当前操作系统的适当构建环境构建 PostgreSQL 扩展。
pig build ext [extname...]
参数:
extname
: 要构建的一个或多个扩展名
对于每个扩展,该命令:
- 切换到适当的构建目录(
~/rpmbuild/BUILD
或~/deb/build
) - 使用扩展名运行 make 命令(例如
make citus
) - 报告每个扩展构建的成功或失败
它实际上利用规范仓库中的 make <ext>
命令来构建扩展。
build proxy
别名: p
设置代理服务器以访问外部资源,在网络访问受限的环境中很有用。
这是完全可选的,如果你没有任何连接问题就不需要它。
pig build proxy [id@host:port] [local]
参数:
id@host:port
: 远程 v2ray 代理规范,格式为user-id@host:port
local
: v2ray 要绑定的本地地址(默认: “127.0.0.1:12345”)
此命令:
- 如果尚未安装,则安装代理软件(
/usr/local/bin/v2ray
) - 使用指定的远程和本地设置配置代理
- 在
/etc/profile.d/proxy.sh
中创建环境设置脚本 - 配置代理服务
- 通过 curl google 测试代理连接
你可以通过运行以下命令加载代理环境变量:
. /etc/profile.d/proxy.sh
设置后,你可以使用以下别名:
po
: 启用代理(在当前 shell 会话中设置代理环境变量)px
: 禁用代理(取消设置代理环境变量)pck
: 检查代理状态(通过 ping google)