@@ -14,7 +14,7 @@ pig build - Build Postgres Extension
1414
1515Environment Setup:
1616 pig build spec # init build spec and directory (~ext)
17- pig build repo # init build repo (=repo set, with remove+update )
17+ pig build repo # init build repo (=repo set -ru )
1818 pig build tool [mini| full| ...] # init build toolset
1919 pig build rust [-y] # install Rust toolchain
2020 pig build pgrx [-v < ver> ] # install & init pgrx (0.19.1)
@@ -31,18 +31,18 @@ Quick Start:
3131 pig build pkg citus # build citus extension
3232```
3333
34- | 命令 | 描述 | 备注 |
35- | :---| :---| : ---|
36- | ` build spec ` | 初始化构建规范仓库 | |
37- | ` build repo ` | 初始化所需仓库 | 需要 sudo 或 root 权限 |
38- | ` build tool ` | 初始化构建工具 | 需要 sudo 或 root 权限 |
39- | ` build rust ` | 安装 Rust 工具链 | 需要 sudo 或 root 权限 |
40- | ` build pgrx ` | 安装并初始化 pgrx | 需要 sudo 或 root 权限 |
41- | ` build proxy ` | 初始化构建代理 | |
42- | ` build get ` | 下载源代码 tarball | |
43- | ` build dep ` | 安装扩展构建依赖 | 需要 sudo 或 root 权限 |
44- | ` build ext ` | 构建扩展包 | 需要 sudo 或 root 权限 |
45- | ` build pkg ` | 完整构建流程:get、dep、ext | 需要 sudo 或 root 权限 |
34+ | 命令 | 描述 | 备注 |
35+ | :-------------- | :------------------- | :--------------- ---|
36+ | ` build spec ` | 初始化构建规范目录 | |
37+ | ` build repo ` | 初始化所需仓库 | 需要 sudo 或 root 权限 |
38+ | ` build tool ` | 初始化构建工具 | 需要 sudo 或 root 权限 |
39+ | ` build rust ` | 安装 Rust 工具链 | 需要 sudo 或 root 权限 |
40+ | ` build pgrx ` | 安装并初始化 pgrx | 需要 sudo 或 root 权限 |
41+ | ` build proxy ` | 初始化构建代理 | |
42+ | ` build get ` | 下载源代码 tarball | |
43+ | ` build dep ` | 安装扩展构建依赖 | 需要 sudo 或 root 权限 |
44+ | ` build ext ` | 构建扩展包 | 需要 sudo 或 root 权限 |
45+ | ` build pkg ` | 完整构建流程:get、dep、ext | 需要 sudo 或 root 权限 |
4646{.full-width}
4747
4848
@@ -58,8 +58,8 @@ pig build spec
5858pig build pkg citus
5959
6060# 构建的包将位于:
61- # - EL: ~/rpmbuild/RPMS/
62- # - Debian: ~/
61+ # - EL: ~/ext/pkg/(同时可从 ~/ rpmbuild/RPMS/ 访问)
62+ # - Debian: ~/ext/pkg/(同时可从 ~/debbuild/DEBS/ 访问)
6363```
6464
6565更精细的控制方式:
@@ -85,48 +85,60 @@ pig build pkg citus # get + dep + ext
8585### 目录结构
8686
8787```
88- ~/ext/ # 默认构建规范目录
89- ├── Makefile # 主构建 makefile
90- ├── <extension>/ # 每个扩展的目录
91- │ ├── Makefile # 扩展特定的 makefile
92- │ ├── <extension>.spec # RPM 规范文件(EL)
93- │ └── debian/ # Debian 打包文件
94- │ ├── control
95- │ ├── rules
96- │ └── ...
88+ ~/ext/ # 真实工作目录
89+ ├── pkg/ # 构建产物输出目录
90+ ├── src/ # 源码 tarball 下载目录
91+ ├── log/ # 构建日志目录
92+ └── tmp/ # 临时目录
93+
94+ ~/rpmbuild/ # EL 构建目录
95+ ├── RPMS -> ~/ext/pkg # RPM 产物软链接
96+ ├── SOURCES -> ~/ext/src # 源码软链接
97+ ├── SPECS/
98+ ├── BUILD/
99+ ├── BUILDROOT/
100+ └── SRPMS/
101+
102+ ~/debbuild/ # Debian / Ubuntu 构建目录
103+ ├── DEBS -> ~/ext/pkg # DEB 产物软链接
104+ ├── SOURCES -> ~/ext/src # 源码软链接
105+ ├── SPECS/
106+ └── BUILD/
97107```
98108
99109** 构建输出位置:**
100- - ** EL 系统** :` ~/rpmbuild/RPMS/<arch>/ `
101- - ** Debian 系统** :` ~/ ` (deb 文件)
110+ - ** EL 系统** :` ~/ext/pkg/ ` ,并通过 ` ~/ rpmbuild/RPMS/` 软链接访问
111+ - ** Debian 系统** :` ~/ext/pkg/ ` ,并通过 ` ~/debbuild/DEBS/ ` 软链接访问
102112
103113
104114## build spec
105115
106- 设置构建规范仓库和目录结构 。
116+ 设置构建规范与目录结构 。
107117
108118``` bash
109119pig build spec # 在默认位置初始化 ~/ext
120+ pig build spec -f # 强制重新下载构建规范 tarball
121+ pig build spec -m # 优先使用 pigsty.cc 中国镜像
110122```
111123
112124** 功能:**
113- 1 . 克隆或更新扩展构建规范仓库
114- 2 . 创建必要的目录结构
115- 3 . 设置 makefile 和构建脚本
116- 4 . 准备平台特定的打包文件
125+ 1 . 下载 RPM 或 DEB 构建规范 tarball
126+ 2 . 创建 ` ~/ext/{pkg,src,log,tmp} ` 与平台构建目录
127+ 3 . 将 ` RPMS/DEBS ` 与 ` SOURCES ` 软链接到 ` ~/ext/pkg ` 和 ` ~/ext/src `
128+ 4 . 通过增量 ` rsync ` 同步 makefile、spec 与 Debian 打包文件
117129
118- ** 仓库位置 :** 默认 ` ~/ext/ ` ,包含 100+ 扩展的构建规范 。
130+ ** 工作目录 :** 默认使用 ` ~/ext/ ` 保存源码、产物、日志与临时文件;平台打包目录为 ` ~/rpmbuild/ ` 或 ` ~/debbuild/ ` 。
119131
120132
121133## build repo
122134
123135初始化构建扩展所需的包仓库。
124136
125137``` bash
126- pig build repo # 等同于:pig repo set(内部执行 remove+update)
138+ pig build repo # 等同于:pig repo set -ru
127139```
128140
129- ** 功能:** 移除现有仓库、添加所有必需仓库(pgdg、pigsty、node)、更新包缓存 。
141+ ** 功能:** 以 ` pig repo set -ru ` 初始化构建所需仓库:移除旧仓库、添加所需仓库并更新包缓存 。
130142
131143
132144## build tool
@@ -165,7 +177,9 @@ pig build rust -y # 强制重新安装 Rust 工具链
165177
166178``` bash
167179pig build pgrx # 安装最新稳定版 (0.19.1)
168- pig build pgrx -v 0.15.0 # 安装特定版本
180+ pig build pgrx -v 0.19.1 # 安装特定版本
181+ pig build pgrx --pg 18,17,16 # 为指定 PG 版本初始化 pgrx
182+ pig build pgrx --pg init # 只执行 cargo pgrx init,不传 PG 参数
169183```
170184
171185** 前提条件:** 必须先安装 Rust 工具链、PostgreSQL 开发头文件。
@@ -177,8 +191,8 @@ pig build pgrx -v 0.15.0 # 安装特定版本
177191
178192``` bash
179193pig build proxy # 交互式设置
180- pig build proxy user@host:8080 # 直接配置
181- pig build proxy http://proxy.company.com:3128
194+ pig build proxy user@host:8080 # 使用默认本地端口 127.0.0.1:12345
195+ pig build proxy user@host:8080 127.0.0.1:1080
182196```
183197
184198
@@ -189,20 +203,23 @@ pig build proxy http://proxy.company.com:3128
189203``` bash
190204pig build get citus # 单个扩展
191205pig build get citus pgvector # 多个扩展
192- pig build get all # 所有可用扩展
193- pig build get std # 标准扩展
194206pig build get pdu pgdog # 使用内置源码 alias
207+ pig build get citus -f # 已存在时仍重新下载
208+ pig build get citus -m # 优先使用 pigsty.cc 中国镜像
195209```
196210
197- 一些源码包并不直接对应扩展名,` pig build get ` 内置了少量特殊 alias 以便直接下载源码。` v1.3.2 ` 新增了 ` pdu ` 与 ` pgdog ` 两个 alias。
211+ ` pig build get ` 的参数是扩展名、包名或源码文件名;未知名称会按源码文件名处理。它不会把 ` all ` 或 ` std ` 展开为内置集合。需要批量下载时,请显式列出目标包名。
212+
213+ 一些源码包并不直接对应扩展名,` pig build get ` 内置了特殊 alias 以便直接下载源码。
198214
199215``` bash
200216pig build get pdu # 下载 pdu-3.0.25.12.tar.gz
201217pig build get pgdog # 下载 pgdog-0.1.32.tar.gz
202218pig build get pgedge # 同时下载 PostgreSQL 与 spock 源码
219+ pig build get onesparse # 同时下载 onesparse、graphblas、lagraph
203220```
204221
205- 当前常见的特殊源码 alias 包括:` babelfishpg ` / ` babelfish ` 、` agensgraph ` / ` agens ` 、` pgedge ` 、` pdu ` 、` pgdog ` 。
222+ 当前常见的特殊源码 alias 包括:` babelfishpg ` / ` babelfish ` 、` agensgraph ` / ` agentsgraph ` 、` oriolepg ` / ` orioledb ` 、 ` cloudberry ` 、 ` pgedge ` 、` pdu ` 、` pgdog ` 、 ` rdkit ` 、 ` onesparse ` 、 ` libfepgutils ` 。
206223
207224
208225## build dep
@@ -215,6 +232,10 @@ pig build dep citus pgvector # 多个扩展
215232pig build dep citus --pg 17,16 # 为特定 PG 版本
216233```
217234
235+ ** 选项:**
236+
237+ - ` --pg ` :指定一个或多个 PostgreSQL 大版本;未指定时按扩展元数据或本机安装自动推断
238+
218239
219240## build ext
220241
@@ -227,6 +248,11 @@ pig build ext citus --pg 17 # 为特定 PG 版本
227248pig build ext citus -s # 包含调试符号(仅 RPM)
228249```
229250
251+ ** 选项:**
252+
253+ - ` --pg ` :指定一个或多个 PostgreSQL 大版本
254+ - ` -s|--symbol ` :构建调试符号包(仅 RPM)
255+
230256
231257## build pkg
232258
@@ -237,8 +263,15 @@ pig build pkg citus # 构建单个扩展
237263pig build pkg citus pgvector # 构建多个
238264pig build pkg citus --pg 17,16 # 为多个 PG 版本
239265pig build pkg citus -s # 包含调试符号
266+ pig build pkg citus -m # 优先使用 pigsty.cc 中国镜像下载源码
240267```
241268
269+ ** 选项:**
270+
271+ - ` --pg ` :指定一个或多个 PostgreSQL 大版本
272+ - ` -s|--symbol ` :构建调试符号包(仅 RPM)
273+ - ` -m|--mirror ` :下载源码时优先使用 ` pigsty.cc ` 镜像
274+
242275
243276## 常见工作流
244277
@@ -254,8 +287,8 @@ pig build tool
254287pig build pkg pg_partman
255288
256289# 3. 安装构建的包
257- sudo rpm -ivh ~ /rpmbuild/RPMS/x86_64 /pg_partman* .rpm # EL
258- sudo dpkg -i ~ /pg_partman * .deb # Debian
290+ sudo rpm -ivh ~ /ext/pkg /pg_partman* .rpm # EL
291+ sudo dpkg -i ~ /ext/pkg/ * partman * .deb # Debian
259292```
260293
261294### 工作流 2:构建 Rust 扩展
@@ -329,7 +362,7 @@ export PG_CONFIG=/usr/pgsql-18/bin/pg_config
329362curl --proto ' =https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
330363
331364# 更新 PGRX
332- cargo install cargo-pgrx --force
365+ cargo install --locked cargo-pgrx@0.19.1
333366
334367# 重新初始化 PGRX
335368cargo pgrx init
0 commit comments