扩展构建:build

如何使用 pig build 命令构建 PostgreSQL 扩展并准备构建环境?

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 扩展的典型工作流程:

  1. 设置仓库: pig build repo
  2. 安装构建工具: pig build tool
  3. (可选) 设置代理: pig build proxy id@host:port
  4. (可选,用于 Rust 扩展) 设置 Rust: pig build rust
  5. 初始化构建规范: pig build spec
  6. 下载源代码: pig build get [prefixes]
  7. 构建扩展: 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”)

此命令:

  1. 如果尚未安装,则使用 rustup 安装 Rust
  2. 安装指定版本的 cargo-pgrx
  3. 使用适当的 PostgreSQL 配置(版本 13-17)初始化 PGRX

build spec

别名: s

根据操作系统初始化构建规范仓库:

pig build spec
  • 对于 EL 发行版 (RHEL, Rocky, CentOS):

    1. 从 GitHub 克隆 RPM 规范仓库
    2. ~/rpmbuild 上设置 RPM 构建文件层次结构
  • 对于 DEB 发行版 (Debian, Ubuntu):

    1. 从 GitHub 克隆 DEB 规范仓库
    2. ~/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: 要构建的一个或多个扩展名

对于每个扩展,该命令:

  1. 切换到适当的构建目录(~/rpmbuild/BUILD~/deb/build)
  2. 使用扩展名运行 make 命令(例如 make citus)
  3. 报告每个扩展构建的成功或失败

它实际上利用规范仓库中的 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”)

此命令:

  1. 如果尚未安装,则安装代理软件(/usr/local/bin/v2ray)
  2. 使用指定的远程和本地设置配置代理
  3. /etc/profile.d/proxy.sh 中创建环境设置脚本
  4. 配置代理服务
  5. 通过 curl google 测试代理连接

你可以通过运行以下命令加载代理环境变量:

. /etc/profile.d/proxy.sh

设置后,你可以使用以下别名:

  • po: 启用代理(在当前 shell 会话中设置代理环境变量)
  • px: 禁用代理(取消设置代理环境变量)
  • pck: 检查代理状态(通过 ping google)




最后修改 2025-03-22: update pig docs (3a10e19)