这是本节的多页打印视图。 .
pig 1.8 文档
- 1: 上手
- 2: 简介
- 3: 安装
- 4: 版本
- 5: pig
- 6: pig repo
- 7: pig ext
- 8: pig build
- 9: pig sty
- 10: pig inventory
- 11: pig postgres
- 12: pig patroni
- 13: pig pgbackrest
- 14: pig pitr
—— Postgres Install Genius,PostgreSQL 生态中缺失的扩展包管理器
PIG 包管理器是一个专门用于安装、管理、构建 PostgreSQL 及其扩展的命令行工具,使用 Go 开发,开箱即用,简单易用,小巧玲珑(约 5MB)。
PIG 包管理器并非重新发明的土鳖轮子,而是 依托 (PiggyBack)现有 Linux 发行版包管理器 (apt/dnf)的一个高级抽象层。
它屏蔽了不同操作系统,不同芯片架构,以及不同 PG 大版本的管理差异,让您用简单的几行命令,就可以完成 PG 内核与 575 个已打包扩展的安装与管理。
PIG 的命令设计同样适合自动化脚本:提供统一的参数风格、清晰的错误提示,以及如 --plan 等预览开关与确认步骤。
请注意:对于扩展安装来说,pig 并非必须组件,您依然可以使用 apt / dnf 等包管理器直接访问 Pigsty PGSQL 仓库。
快速上手
使用以下命令即可在您的系统上 安装 PIG 包管理器:
默认安装(Cloudflare CDN):
中国镜像:
安装完成后,几行命令即可 快速开始。例如,若需安装 PG 18 与相应的 pg_duckdb 扩展:
命令参考
你可以执行 pig help <command> 获取子命令的详细帮助。
扩展管理:
- pig repo:管理 APT/YUM 软件仓库
- pig ext:管理 PostgreSQL 扩展
- pig build:从源码构建扩展
- pig install:通过原生包管理器安装 PostgreSQL 与扩展包
Pigsty 管理:
- pig sty:管理 Pigsty 安装与 Grafana 仪表盘
- pig inventory:检视、编辑、校验与交换 Pigsty 配置清单
- pig context:采集主机、PostgreSQL、Patroni、pgBackRest 与扩展上下文
- pig pg:管理本地 PostgreSQL 服务
- pig pt:透明运行 patronictl 管理 Patroni HA 集群
- pig pb:管理 pgBackRest 备份
- pig pitr:时间点恢复工作流
关于
pig 命令行工具由 Vonng(冯若航 rh@vonng.com)开发,并以 Apache 2.0 许可证开源。
您还可以参考 PIGSTY 项目,提供了包括扩展交付在内的完整 PostgreSQL RDS DBaaS 使用体验。
1 - 上手
下面是一个简单的上手教程,带您体验 PIG 包管理器的核心能力。
简短版本
安装
您可以使用以下命令 一键安装 pig:
中国大陆:
全球网站(Cloudflare CDN):
PIG 二进制包大约 5 MB,在 Linux 上会自动使用 rpm 或 dpkg 安装所选镜像中的最新可用版本。下方示例输出中的 X.Y.Z 代表该镜像版本:
检查环境
PIG 是一个由 Go 编写的二进制程序,默认安装路径为 /usr/bin/pig,pig version 会打印版本信息:
使用 pig status 命令,会打印当前环境的状态,操作系统代码,PG 的安装情况,仓库的可访问性与延迟。
自动化建议
对于生产环境恢复任务,建议先使用 --plan 预览 PITR 执行计划,再决定是否实际执行:
列出扩展
先使用 pig ext reload 刷新在线目录,再使用 pig ext list 打印当前的 PG 扩展数据目录。
所有的扩展元数据都在一份名为 extension.csv 的数据文件中定义,
这份文件会随着 pig 版本发布不断更新,您可以直接使用 pig ext reload 命令更新这份数据文件。
更新后的文件会默认放置于 ~/.pig/extension.csv 中,您可以查阅与更改;在线最新版目录可在 pigsty.io/ext/data/extension.csv 获取。
当前文档统一按 575 个已打包扩展表述;各扩展在不同 PostgreSQL 版本、操作系统与架构上的可用性,以实时支持矩阵为准。
添加仓库
要想安装扩展,首先需要添加上游仓库。pig repo 可用于管理 Linux APT/YUM/DNF 软件仓库配置。
您可以使用简单粗暴直接的版本 pig repo set 覆盖式写入现有仓库配置,该命令确保系统中只存在必须的仓库配置:
警告:
pig repo set会备份并清理现有的仓库配置,然后添加所需的仓库,实现 Overwrite 语义,请务必注意!
或者选择使用温和的 pig repo add 添加所需的仓库:
PIG 会检测您的网络环境,并选择使用 Cloudflare 全球 CDN,或者中国境内云 CDN,但您可以通过 --region 参数强制指定区域。
在中国网络环境中,-m|--mirror 会明确选择内置的 china 仓库定义,包括 pigsty.cc 与维护中的国内镜像。
PIG 本身不支持离线安装,您可以自行下载 RPM/DEB 包,拷贝到网络隔离的生产服务器安装。 相关项目 PIGSTY 提供本地软件仓库,支持可以使用 pig 从本地软件仓库安装已经下载好的扩展。
安装 PG
添加仓库后,您可以使用 pig ext add 子命令安装扩展(以及相关软件包)
这里使用了 “别名翻译” 机制,将清爽的 PG 内核/扩展 逻辑包名翻译为实际的 RPM/DEB 列表。如果您不需要别名翻译机制,可以直接使用 apt/dnf 安装,
或者使用变体 pig install 的 -n|--no-translation 参数:
别名翻译
PostgreSQL 内核与扩展对应着一系列的 RPM/DEB 包,记住这些包是一件麻烦事,所以 pig 提供了许多常用的别名,帮助您简化安装过程:
例如在 EL 系统上, 下面的别名将会被翻译为右侧的对应 RPM 包列表:
注意这里的 $v 占位符会被替换为 PG 大版本号,因此当您使用 pgsql 别名时,$v 会被实际替代为 18,17 这样的大版本号。
因此,当您安装 pg18-server 别名时,EL 上实际安装的是 postgresql18-server, postgresql18-libs, postgresql18-contrib,在 Debian / Ubuntu 上安装的是 postgresql-18,pig 会处理好所有细节。
常用 PostgreSQL 别名
上面这些别名可以直接使用,并通过参数实例化大版本号,也可以使用另一种带有大版本号的别名变体:即将 pgsql 替换为 pg18, pg17, pgxx 等具体大版本号。
当前活跃支持的 PostgreSQL 主版本范围为 14-18,例如对于 PostgreSQL 18,可以直接使用下面这些别名:
pgsql | pg18 | pg17 | pg16 | pg15 | pg14 |
|---|---|---|---|---|---|
pgsql | pg18 | pg17 | pg16 | pg15 | pg14 |
pgsql-mini | pg18-mini | pg17-mini | pg16-mini | pg15-mini | pg14-mini |
pgsql-core | pg18-core | pg17-core | pg16-core | pg15-core | pg14-core |
pgsql-full | pg18-full | pg17-full | pg16-full | pg15-full | pg14-full |
pgsql-main | pg18-main | pg17-main | pg16-main | pg15-main | pg14-main |
pgsql-client | pg18-client | pg17-client | pg16-client | pg15-client | pg14-client |
pgsql-server | pg18-server | pg17-server | pg16-server | pg15-server | pg14-server |
pgsql-devel | pg18-devel | pg17-devel | pg16-devel | pg15-devel | pg14-devel |
pgsql-basic | pg18-basic | pg17-basic | pg16-basic | pg15-basic | pg14-basic |
安装扩展
pig 会检测当前系统环境中的 PostgreSQL 安装情况。如果检测到环境中(以 PATH 中的 pg_config 为准)有活跃的 PG 安装,那么 pig 会自动安装对应 PG 大版本所需的扩展,无需您显式指定 PG 大版本。
提示:如需将特定大版本的 PostgreSQL 内核二进制加入 PATH,可用 pig ext link 命令:
如果你想要安装特定版本的软件,可以使用 name=ver 的语法:
警告:请注意,目前只有 PGDG YUM 仓库提供扩展历史版本,PIGSTY 仓库与 PGDG APT 仓库都只提供扩展的 最新版本。
显示扩展
pig ext status 命令可以用于显示当前安装的扩展。
以下输出用于展示命令格式,是一次环境快照;PostgreSQL 小版本与扩展版本会随操作系统仓库更新,请以本机实时输出和当前软件包目录为准。
如果您的当前系统路径中找不到 PostgreSQL(以 PATH 中的 pg_config 为准),建议显式通过 -v|-p 指定 PG 大版本号或 pg_config 路径,以避免版本探测歧义。
扫描扩展
pig ext scan 提供更底层的扩展扫描功能,将扫描指定 PostgreSQL 目录下的共享库,从而发现安装了哪些扩展:
以下同样是历史环境快照,而不是 v4.5.0 候选软件包版本清单。
容器实战
您可以创建一台全新的虚拟机,或者使用下面的 Docker 容器进行功能测试,创建一个 d13 目录,创建 Dockerfile:
2 - 简介
你是否曾因安装或升级 PostgreSQL 扩展而头疼?翻查过时的文档、晦涩难懂的配置脚本,或是在 GitHub 上苦寻分支与补丁? Postgres 丰富的扩展生态同时意味着复杂的部署流程 —— 在多发行版、多架构环境下尤为棘手。而 PIG 可以为您解决这些烦恼。
这正是 Pig 诞生的初衷。Pig 由 Go 语言开发,致力于一站式管理 Postgres 及其 575 个扩展。 无论是 TimescaleDB、Citus、PGVector,还是 30+ Rust 扩展,亦或 自建 Supabase 所需的全部组件 —— Pig 统一的 CLI 让一切触手可及。 它彻底告别源码编译与杂乱仓库,直接提供版本对齐的 RPM/DEB 包,完美兼容 Debian、Ubuntu、RedHat 等主流发行版,支持 x86 与 Arm 架构,无需猜测,无需折腾。
Pig 并非重复造轮子,而是充分利用系统原生包管理器(APT、YUM、DNF),严格遵循 PGDG 官方 打包规范,确保无缝集成。
你无需在"标准做法"与"快捷方式"之间权衡;Pig 尊重现有仓库,遵循操作系统最佳实践,与现有仓库和软件包和谐共存。
如果你的 Linux 系统和 PostgreSQL 大版本不在 支持的列表 中,你还可以使用 pig build 直接针对特定组合编译扩展。
想让你的 Postgres 如虎添翼、远离繁琐?欢迎访问 PIG 官方文档 获取文档、指南,并查阅庞大的 扩展列表, 让你的本地 Postgres 数据库一键进化为全能的多模态数据中台。 如果说 Postgres 的未来是无可匹敌的可扩展性,那么 Pig 就是帮你解锁它的神灯。毕竟,从没有人抱怨 “扩展太多”。
自动化友好
PIG 的命令体系可直接用于自动化脚本:参数风格统一、输出稳定,并在高风险操作中提供 --plan 预览或确认步骤,减少误操作风险。
Linux 兼容性
PIG 与 Pigsty 扩展仓库支持以下 Linux 发行版和 PostgreSQL 版本组合:
| OS 代码 | 厂商 | 大版本 | 小版本 | 全名 | PG 版本 | 备注 |
|---|---|---|---|---|---|---|
el7.x86_64 | EL | 7 | 7.9 | CentOS 7 x86 | 13-15 | EOL |
el8.x86_64 | EL | 8 | 8.10 | RockyLinux 8 x86 | 14-18 | 即将 EOL |
el8.aarch64 | EL | 8 | 8.10 | RockyLinux 8 ARM | 14-18 | 即将 EOL |
el9.x86_64 | EL | 9 | 9.8 | RockyLinux 9 x86 | 14-18 | ✅ |
el9.aarch64 | EL | 9 | 9.8 | RockyLinux 9 ARM | 14-18 | ✅ |
el10.x86_64 | EL | 10 | 10.2 | RockyLinux 10 x86 | 14-18 | ✅ |
el10.aarch64 | EL | 10 | 10.2 | RockyLinux 10 ARM | 14-18 | ✅ |
d11.x86_64 | Debian | 11 | 11.11 | Debian 11 x86 | 14-18 | EOL |
d11.aarch64 | Debian | 11 | 11.11 | Debian 11 ARM | 14-18 | EOL |
d12.x86_64 | Debian | 12 | 12.15 | Debian 12 x86 | 14-18 | ✅ |
d12.aarch64 | Debian | 12 | 12.15 | Debian 12 ARM | 14-18 | ✅ |
d13.x86_64 | Debian | 13 | 13.6 | Debian 13 x86 | 14-18 | ✅ |
d13.aarch64 | Debian | 13 | 13.6 | Debian 13 ARM | 14-18 | ✅ |
u22.x86_64 | Ubuntu | 22 | 22.04.5 | Ubuntu 22.04 x86 | 14-18 | ✅ |
u22.aarch64 | Ubuntu | 22 | 22.04.5 | Ubuntu 22.04 ARM | 14-18 | ✅ |
u24.x86_64 | Ubuntu | 24 | 24.04.4 | Ubuntu 24.04 x86 | 14-18 | ✅ |
u24.aarch64 | Ubuntu | 24 | 24.04.4 | Ubuntu 24.04 ARM | 14-18 | ✅ |
u26.x86_64 | Ubuntu | 26 | 26.04.0 | Ubuntu 26.04 x86 | 14-18 | ✅ |
u26.aarch64 | Ubuntu | 26 | 26.04.0 | Ubuntu 26.04 ARM | 14-18 | ✅ |
说明:
- EL 指 RHEL 兼容发行版,包括 RHEL、CentOS、RockyLinux、AlmaLinux、OracleLinux 等
- EOL 表示该操作系统已经或即将停止支持,建议升级到更新版本
- ✅ 表示完整支持,推荐使用
- PG 版本 14-18 表示支持 PostgreSQL 14、15、16、17、18 五个大版本
3 - 安装
脚本安装
安装 pig 最简单的方式是运行以下安装脚本:
默认安装(Cloudflare CDN):
中国镜像:
该脚本会从 Pigsty 软件仓库 下载最新版 pig 的 RPM / DEB 包,并通过 rpm 或 dpkg 进行安装。
脚本安装面向 Linux x86_64 / aarch64 的 RPM / DEB 系发行版;macOS 可使用发布压缩包中的二进制。
指定版本
您可以指定已经发布到所选镜像的特定版本,将版本号作为参数传入即可:
默认安装(Cloudflare CDN):
中国镜像:
镜像发布可能晚于 GitHub Release;如需精确获取当前版本,请使用下方 GitHub 制品。
发布产物下载
当前 v1.8.0 安装包(RPM/DEB/压缩包)可从 GitHub Release 获取,发布哈希见 checksums.txt。直接下载格式如下:
https://github.com/pgsty/pig/releases/download/v1.8.0/<filename>
将其解压后,将二进制文件放入您的 PATH 系统路径中即可。 对应的 Pigsty 镜像目录会在软件仓库同步后可用;使用锁定版本的安装命令前,请先检查目标 URL。
仓库安装
pig 软件位于 pigsty-infra 仓库中。你可以将该仓库添加到操作系统后,使用操作系统的包管理器进行安装:
YUM
对于 RHEL,RockyLinux,CentOS,Alma Linux,OracleLinux 等 EL 系发行版:
APT
对于 Debian,Ubuntu 等 DEB 系发行版:
更新
若要将现有 pig 版本升级至最新可用版本,可以使用以下命令:
若要将现有 pig 的扩展数据升级至最新可用版本,可以使用以下命令:
卸载
构建
你也可以自行构建 pig。pig 使用 Go 语言开发,构建非常容易,源码托管在 github.com/pgsty/pig
所有 RPM / DEB 包都通过 GitHub CI/CD 流程使用 goreleaser 自动化构建。
4 - 版本
最新稳定版本是 v1.8.0。
| 版本 | 日期 | 摘要 | GitHub |
|---|---|---|---|
| v1.8.0 | 2026-08-14 | 原生 sty boot 与 sty conf,575 个已打包扩展 | v1.8.0 |
| v1.7.0 | 2026-08-12 | EL 模块策略、中国镜像与 EL7 兼容目录,575 个扩展 | v1.7.0 |
| v1.6.2 | 2026-08-11 | 572 个扩展,Grafana schema v2,SOW 优先的软件仓库生成 | v1.6.2 |
| v1.6.1 | 2026-07-30 | 扩展目录刷新,内置 Pigsty 版本对齐到 4.5.0 | v1.6.1 |
| v1.6.0 | 2026-07-28 | 562 个已打包扩展,pt 原生透传,inventory 与 CMDB,Grafana 管理 | v1.6.0 |
| v1.5.1 | 2026-07-08 | PG 内核分支包更新,镜像模式,修复若干问题 | v1.5.1 |
| v1.5.0 | 2026-07-04 | 531 个扩展,pigsty v4.4,pg/pb/pt/pitr 重做,clone/fork | v1.5.0 |
| v1.4.2 | 2026-06-18 | 524 个扩展,PG19 beta,pgrx 0.18.1,Patroni 修复 | v1.4.2 |
| v1.4.1 | 2026-05-01 | 510 个扩展,支持 Ubuntu 26.04,仓库校准 | v1.4.1 |
| v1.4.0 | 2026-04-19 | 510 个扩展,pgrx 0.18.0,更多构建规格 | v1.4.0 |
| v1.3.4 | 2026-04-14 | 504 扩展更新与发布产物校验和刷新 | v1.3.4 |
| v1.3.3 | 2026-04-10 | 481 扩展与 Go 1.26.2 更新 | v1.3.3 |
| v1.3.2 | 2026-03-23 | 例行元数据更新,新增 pg tune 与构建别名 | v1.3.2 |
| v1.3.1 | 2026-03-05 | PG13 退役,支持窗口统一为 PG14-18,扩展增至 464 | v1.3.1 |
| v1.3.0 | 2026-02-27 | 构建链路强化,扩展增至 461,新内核支持 | v1.3.0 |
| v1.2.0 | 2026-02-23 | 统一别名,例行更新,计划模式,仓库修复 | v1.2.0 |
| v1.1.0 | 2026-02-12 | 451 扩展,Agent-Native CLI 框架 | v1.1.0 |
| v1.0.0 | 2026-01-26 | 444, 新增 pg/pt/pb/pitr 子命令,可用性矩阵 | v1.0.0 |
| v0.8.0 | 2025-12-26 | 440 extensions,移除 sysupdate 仓库 | v0.8.0 |
| v0.7.5 | 2025-12-12 | 常规扩展更新,使用修复后的阿里云镜像 | v0.7.5 |
| v0.7.4 | 2025-12-01 | 更新 ivory/pgtde 内核与 pgdg extras 仓库 | v0.7.4 |
| v0.7.3 | 2025-11-24 | 修复 el10 & debian13 仓库配置 | v0.7.3 |
| v0.7.2 | 2025-11-20 | 437 个扩展,修复 pig build 的一些问题 | v0.7.2 |
| v0.7.1 | 2025-11-10 | 新网站,改进容器内的使用体验 | v0.7.1 |
| v0.7.0 | 2025-11-05 | 强化 build 能力,大批量包更新 | v0.7.0 |
| v0.6.2 | 2025-10-03 | 正式提供 PG 18 支持 | v0.6.2 |
| v0.6.1 | 2025-08-14 | CI/CD, el10 存根,PGDG 中国镜像 | v0.6.1 |
| v0.6.0 | 2025-07-17 | 423 个扩展,percona pg_tde,mcp 工具箱 | v0.6.0 |
| v0.5.0 | 2025-06-30 | 422 个扩展,新的扩展目录 | v0.5.0 |
| v0.4.2 | 2025-05-27 | 421 个扩展,halo 和 oriole deb | v0.4.2 |
| v0.4.1 | 2025-05-07 | 414 个扩展,pg18 别名支持 | v0.4.1 |
| v0.4.0 | 2025-05-01 | do 和 pt 子命令,halo 和 orioledb | v0.4.0 |
| v0.3.4 | 2025-04-05 | 常规更新 | v0.3.4 |
| v0.3.3 | 2025-03-25 | 别名、仓库、依赖 | v0.3.3 |
| v0.3.2 | 2025-03-21 | 新扩展 | v0.3.2 |
| v0.3.1 | 2025-03-19 | 轻微错误修复 | v0.3.1 |
| v0.3.0 | 2025-02-24 | 新主页和扩展目录 | v0.3.0 |
| v0.2.2 | 2025-02-22 | 404 个扩展 | v0.2.2 |
| v0.2.0 | 2025-02-14 | 400 个扩展 | v0.2.0 |
| v0.1.4 | 2025-02-12 | 常规错误修复 | v0.1.4 |
| v0.1.3 | 2025-01-23 | 390 个扩展 | v0.1.3 |
| v0.1.2 | 2025-01-12 | anon 扩展和其他 350 个扩展 | v0.1.2 |
| v0.1.1 | 2025-01-09 | 更新扩展列表 | v0.1.1 |
| v0.1.0 | 2024-12-29 | repo、ext、sty 和自更新 | v0.1.0 |
| v0.0.1 | 2024-12-23 | 创世发布 | v0.0.1 |
v1.8.0
Pig v1.8.0 是 v1.7.0 之上的控制节点工作流更新版本:pig sty boot 与
pig sty conf 已由 Go 原生实现,不再包装旧版 bootstrap 与 configure Shell 脚本。
已打包 PostgreSQL 扩展数量保持 575,内置 Pigsty 版本保持 4.5.0。
主要变化
pig sty boot现在可以自动提权,实际校验 Ansible 及其 Python 运行时,并支持显式本地包、 HTTP(S) URL、可信自动离线包、已提交本地仓库与区域在线仓库。仓库替换默认带备份与失败回滚, 本机 SSH 和缺失的~/pigsty则以尽力而为方式修复。pig sty conf现在从安全模板原生生成 Inventory,支持最多十个 IP、精确域名替换、区域与代理、 PostgreSQL 版本和随机口令配置;候选配置通过完整校验后,以0600权限原子写入。- 引导下载与解压不再依赖
curl、wget、tar或gzip;离线模式严格限定为pigsty-local,并补齐/www -> /data/nginx仓库布局。 - EL8 及以上软件包操作统一优先使用 DNF,本地 RPM 依赖按提供能力解析;例行刷新扩展元数据与
可用性矩阵,并升级到 Go
1.26.6发布工具链。
兼容性提醒
pig sty boot不再执行<PIGSTY_HOME>/bootstrap,依赖脚本副作用的自动化需要迁移到原生命令。pig sty conf --raw已移除;--conf MODE与位置参数MODE等价。--ip最多接受十个地址, 且不能与--skip同时使用。- EL8 及以上使用 DNF;有限的 EL7 兼容目录继续使用独立的传统 YUM 路径。
校验和
制品:GitHub Release · checksums.txt
发布:https://github.com/pgsty/pig/releases/tag/v1.8.0
v1.7.0
Pig v1.7.0 是 v1.6.2 之上的仓库兼容性与目录更新版本:明确中国镜像选择语义,默认保留 DNF 原生模块过滤,恢复精简的 EL7 仓库目录,并将内置扩展快照从 572 个增加到 575 个。内置 Pigsty 版本仍为 4.5.0。
主要变化
-m|--mirror现在直接选择内置的china仓库定义。PGDG、Rocky Linux、Debian、Ubuntu、Docker 等区域路由使用维护中的镜像列表,不再进行旧版运行时 PGDG 代理改写。- EL 仓库不再全局注入
module_hotfixes=1。确实需要覆盖模块流的 Pigsty 与 PGDG 仓库会显式启用;BaseOS、AppStream、EPEL 等普通仓库继续使用 DNF 原生模块过滤。 - EL7 保留有意精简的兼容目录:面向
x86_64的 CentOS 7 Base/Updates/Extras/SCLo 与 EPEL 归档源,以及共享的 Pigsty 和仍受支持的 PGDG 条目。渲染 EL7 YUM 配置时会移除仅适用于 DNF 的module_hotfixes。 - 当目录中没有匹配当前平台的仓库定义时,仓库设置会明确报告平台不受支持,而不是继续处理空仓库集合。
扩展目录
- 已打包扩展数量从 572 增加到 575,没有移除项。
- 新增
pg_local_cache 1.2.0、pg_statviz 0.1.0、pg_policy 0.1.0。 - 更新
biscuit 3.0.0、pg_clickhouse 0.10.0、pg_search 0.25.2、pg_turbovec软件包1.29.0、pg_uuid_v8 1.1.0,以及 Debianq3c 2.0.5软件包。
兼容性提醒
- 本版本没有移除命令或全局参数。
-m|--mirror现在明确选择中国区域,不再进行 PGDG 代理改写;需要固定路由时请使用--region=default|china|europe。- 自定义 EL 仓库如果确实需要覆盖模块流,必须显式设置
meta.module_hotfixes: 1;普通操作系统仓库会有意省略该设置,EL7 上则会移除它。 - EL7 已停止维护,仅提供有限兼容性;当前 PostgreSQL 与扩展软件包应优先使用 EL8 或更高版本。
校验和
制品:GitHub Release · checksums.txt
发布:https://github.com/pgsty/pig/releases/tag/v1.7.0
v1.6.2
Pig v1.6.2 是 v1.6.1 之上的功能与目录更新版本:已打包扩展从 562 个增加到 572 个,新增 Grafana 仪表盘 schema v2 原生支持,并改进本地软件仓库生成流程。内置 Pigsty 版本继续锁定为 4.5.0。
主要变化
pig sty grafana现在同时支持传统仪表盘 JSON 与原生dashboard.grafana.app/v2Dashboard 资源。载入 v2 仪表盘时使用 Grafana resource API,确保标签页与 section 变量可以完整往返;导出到现有 v2 文件时保持 v2 格式,新文件默认仍使用传统格式。pig repo create在 SOW 可用时优先执行sow create --pigsty --timeout 10m -- <dir>,要求生成的repo_complete完成标记存在且为普通文件;Linux 上仍可回退到createrepo_c/dpkg-scanpackages。- macOS 现在可通过 SOW 创建本地软件仓库,默认使用当前目录且无需
sudo;Linux 默认目录仍为/www/pigsty。 - 发布元数据升级到
1.6.2,内置 Pigsty 版本保持4.5.0。
扩展目录
- 已打包扩展数量从 562 增加到 572,没有移除项。
- 新增 10 个扩展:
pg_turbovec、pg_disorder、pg_mentat、plruby、jsonb_plruby、hstore_plruby、ltree_plruby、pg_describe、cat_tools、pg_vault_tde。 - 更新 12 个扩展版本:
timescaledb 2.29.1、q3c 2.0.5、pgmnemo 0.16.1、pg_search 0.25.1、citus 14.2.0、citus_columnar 14.2.0、provsql 1.12.0、plpgsql_check 2.10.4、pg_rational 0.0.3、pgbson 2.1.0、pg_readme 0.7.1、pg_readme_test_extension 0.7.1。 - 刷新软件包元数据与可用性矩阵;运行
pig ext reload可以用最新在线目录替换内置的发布快照。
兼容性提醒
- 本版本没有移除命令或全局参数。
- 安装 SOW 后,
pig repo create会优先使用 SOW 而非传统 Linux 生成器,并在报告成功前检查完成标记是否存在。 - 目录总数不代表每个包都适用于所有 PostgreSQL / 操作系统 / 架构组合;请在目标主机上使用
pig ext avail NAME查看实际可用矩阵。
校验和
制品:GitHub Release · checksums.txt
发布:https://github.com/pgsty/pig/releases/tag/v1.6.2
v1.6.1
Pig v1.6.1 是一次维护版本,刷新了内置扩展目录,并将内置 Pigsty 版本对齐到 4.5.0;没有新增命令或参数变更。
主要变化
- 依据 Pigsty 软件仓库重新生成内置
extension.csv,全新安装无需先运行pig ext reload,即可使用当前软件包元数据。 pig sty与pig status报告的内置 Pigsty 版本从4.4.0更新到4.5.0。- 保持 562 个已打包扩展,覆盖 PostgreSQL 14-18、EL 8/9/10、Debian 12/13、Ubuntu 22/24/26,以及
x86_64/aarch64双架构。
校验和
制品:Pigsty 镜像 · checksums.txt
发布:https://github.com/pgsty/pig/releases/tag/v1.6.1
v1.6.0
Pig v1.6.0 是一个大版本:pig pt 重写为 patronictl 原生透传,新增根级 pig inventory 命令组提供 pigsty.yml 的无损编辑与校验(附带实验性的 PostgreSQL CMDB 交换能力),pig sty grafana 提供原生 Grafana 仪表盘管理,已打包扩展目录增至 562 个。
主要变化
pig pt重写为patronictl原生透传:所有集群命令(list、restart、switchover、failover、edit-config等)直接转发,使用原生参数、交互确认、输出与退出码,patronictl 的新功能无需等待 pig 发版即可使用。本地保留status、log、set、service/svc辅助命令,新增-c/--config-file、-d/--dcs-url、-k/--insecure选项与pig pt -- …逃逸写法。- 新增根级
pig inventory命令组(别名inv):status/list/show/edit/validate/check/diff—— 无损 YAML 引擎逐字节保留注释、格式、键序与锚点;edit先校验再原子写入,非法 YAML 不可能落盘。 - 新增 实验性
pig inventory cmdb子命令(check/init/load/dump/enable/disable),通过原生驱动与 Pigsty 的 PostgreSQL CMDB 交换配置清单,破坏性操作带超时限界与摘要锁定的确认门。 - 新增
pig sty grafana(别名gf)通过 HTTP 原生管理 Grafana 仪表盘:info/list/boot/load/init/dump/clean/lang/style。pig sty命令面简化:移除sty edit/validate/check/cmdb/dashboard/release,改用pig inventory、pig sty grafana与pig sty list/get。 - 可靠性强化:仓库 / 目录 / 下载写入全部原子化(中断不再留下半截文件);结构化输出
-o json|yaml下 stdout 只包含结果信封,被包裹命令的输出走 stderr;退出码更精确(用法错误 → 2,缺少--yes确认 → 7);Ansible 列表变量改用 JSON 编码防注入。 - 仓库刷新:MySQL 仓库升级到 8.4 LTS,新增 Percona XtraBackup(
pxb84)与 MySQL Tools 仓库,Kubernetes 升级到 v1.36,LLVM apt 覆盖 Debian/Ubuntu 26,Percona TDE 改用 repo.percona.com 官方源,移除wiltondb仓库。 - 工具链:Go 1.26.5,新增原生 PostgreSQL 驱动(pgx v5),内置 Pigsty 版本
4.4.0。
扩展目录
- 已打包扩展数量从 531 增加到 562;PGEXT.CLOUD 总目录收录 2230 个扩展。
- 新增 33 个扩展,包括
pg_lake家族(pg_lake、pg_lake_table、pg_lake_engine、pg_lake_iceberg、pg_lake_copy)、pg_jieba、pg_cjk_parser、pg_fts、pgmonitor、pgmemento、pg_tiktoken_c、online_advisor、pgsqlmock、plx等。 - 移除 2 个:
pg_analytics、spat;刷新 58 个扩展版本,包括vector 0.8.5、timescaledb 2.28.3、pg_search 0.24.3、pg_tde 2.2.1、powa 5.2.0。 - 包别名与 Pigsty 同步:
kafka更名为kafka-stack;Debian/Ubuntu 的postgresql别名收窄为仅postgresql-$v(完整开发套件请用pgsql/pgsql-full)。
兼容性提醒
- ⚠
pig pt failover <name>:位置参数现在是 集群名 而不是晋升候选成员 —— 请改用pig pt failover CLUSTER --candidate MEMBER,升级前务必检查 failover 自动化脚本。 pig pt位置参数改为原生的集群优先形式(restart CLUSTER [MEMBER]);转发命令返回 patronictl 原生退出码、由 patronictl 自行交互确认(-y不再门禁这些命令),且不再支持-o json(请改用原生--format json)。pig pt config由pig pt set K=V与原生show-config/edit-config取代。- 结构化输出模式下,被包裹工具的输出移至 stderr,stdout 只有 JSON/YAML 信封 —— 请更新解析混合输出的脚本。
pig inventory edit编辑成功后会将配置文件权限收紧为 0600(文件可能包含数据库凭据)。
校验和
发布:https://github.com/pgsty/pig/releases/tag/v1.6.0
v1.5.1
Pig v1.5.1 是一次构建与仓库维护版本,更新了多款 PG 内核分支包。
主要变化
- 镜像/代理模式覆盖 repo、build、sty、update、ext update 等流程;
pig build rust -m会写入 Cargo 镜像配置并使用rsproxy.cn。 - 新增 PostgreSQL 19 beta 的 repo、tool、pgrx 显式构建开关:
pig build repo --beta、pig build tool --beta、pig build pgrx -b;稳定默认值仍保持 PostgreSQL 18 与 PG14-18 窗口。 - 刷新 IvorySQL、PolarDB、OrioleDB、OpenHaloDB、Babelfish、pgEdge 套件等内核与 fork 包别名。
- 改进 Cloudberry 套件构建流程,覆盖
cloudberry、cloudberry-backup、cloudberry-pxf。 - 刷新 Cloudberry、Babelfish、OrioleDB、pgEdge、PolarDB、
polarstore、zlog、libpgfeutils、libfq等源码与包元数据。 - 改进较新 EL release 字符串处理,包括 EL9.6+ / EL10+ 上的 PGDG 仓库,以及 EPEL 在 EL10 上使用的
10zstream。 - 刷新扩展版本,包括
pg_ivm 1.15、spock 5.0.10、snowflake 2.5.0、pg_tde 2.2、decoderbufs 3.6.0、IvorySQL5.4包。
校验和
发布:https://github.com/pgsty/pig/releases/tag/v1.5.1
v1.5.0
Pig v1.5.0 是一次面向 PostgreSQL 日常运维的版本:新增本地数据库 clone / fork 工作流,明确 pg、pt、pb、pitr 的职责边界,并收紧高风险操作的预览、确认与结构化输出行为。
主要变化
pig pg更聚焦本地 PostgreSQL 操作。新增pig pg clone用于快速创建数据库级副本,新增pig pg fork用于创建一次性物理实例分叉,适合本地验证、恢复演练和隔离实验。- 恢复流程拆得更清楚:
pig pitr作为 Patroni / PostgreSQL / pgBackRest 的恢复编排入口;pig pb restore保持为低层 pgBackRest restore 原语。恢复命令现在必须指定明确目标,并提供更具体的 plan 与恢复后指引。 - Patroni 操作更可预期:
pig pt restart、reinit、switchover、failover等高风险操作统一由 Pig 负责确认与 plan 输出;pig pt config pg会提示是否需要pig pt restart --pending。 - 自动化脚本更安全:结构化输出不再隐式确认破坏性操作,执行高风险动作需要显式
-y/--yes;--plan与next_actions更一致,方便先预览、再执行。 - 日志与状态输出更适合排障:
pg、pb、pt的日志命令补齐 latest / tail / show / grep 等常用入口,结构化日志快照使用 JSONL 语义。 - 构建与发布默认值更新:Pig 版本为
1.5.0,内置 Pigsty 版本为4.4.0,pig build pgrx默认cargo-pgrx升级到0.19.1。
扩展目录
- 可用扩展数量从 524 增加到 531,没有移除项。
- 新增扩展:
pg_ducklake、pgdisablelogerror、pg_stat_log、pg_stat_plans、passwordpolicy、db2fce、plpgsql_wrap。 - 刷新一批已有扩展版本与包元数据,代表性更新包括
timescaledb 2.28.2、postgis 3.6.4、vector 0.8.4、biscuit 2.4.1、citus 14.1.0、orioledb 1.8、documentdb 0.113、credcheck 5.0、pgtt 4.5。 orioledbalias 不再固定到 PG17,而是按请求的 PostgreSQL 主版本解析;EL9 ARM64 Patroni alias 也调整为 noarch 包。
兼容性提醒
- 自动化执行破坏性操作时请使用
-y/--yes;结构化输出模式不会再替代人工确认。 pig pb restore/pig pitr需要明确指定一个恢复目标;自动 promote 类行为请使用--target-action=promote。- 若干易混淆短参数经过整理;日志命令的
-o json表示 JSONL 快照,不用于 tail / follow 这类流式交互场景。
校验和
发布:https://github.com/pgsty/pig/releases/tag/v1.5.0
v1.4.2
- 内置扩展目录从 510 个可用扩展刷新到 524 个,新增 14 个扩展:
pg_stl、pgmnemo、psql_bm25s、pg_orca、pg_sorted_heap、graph、pgrdf、fsm_core、jsonschema、pg_durable、pg_mockable、pg_uuid_v8、pg_stat_backtrace、pg_projection。 - 更新 48 个已有扩展的软件包元数据,包括
timescaledb 2.28.0、timescaledb_toolkit 1.23.0、pg_task 2.1.29、pg_search 0.24.0、pg_clickhouse 0.3.2、pg_graphql 1.6.1、documentdb 0.112、toastinfo 1.7、wrappers 0.6.1、pgclone 4.3.2等;没有扩展被移除或降级。 - 新增 PostgreSQL 19 beta 的安装、构建、配置支持。PG19 可以作为显式指定的安装版本使用,但自动探测、目录展示与 latest alias 的稳定默认版本仍保持为 PostgreSQL 18。
- 新增
pg19软件包别名与 PG19 分类别名解析。PG19 分类别名借用 PostgreSQL 18 的可见性模板,并且 beta 软件包展开只包含 PGDG 来源条目。 pig sty conf -v 19会在模板支持时自动启用beta仓库模块;当模板没有针对 PG19 beta 调优,或无法自动启用 beta 仓库时,会给出明确警告。- 修复 Patroni 集群操作:
patronictl restart、reinit、switchover、failover现在会传入解析出的CLUSTER_NAME;pig pt list也支持可选集群名参数。 pig build pgrx的默认pgrx版本从0.18.0升级到0.18.1。- 发布元数据更新到
v1.4.2,刷新 Go module checksum,并补充 PG19 alias / 配置生成与 Patroni cluster-scope 行为的针对性测试。
校验和
发布:https://github.com/pgsty/pig/releases/tag/v1.4.2
v1.4.1
- 扩展目录更新到 510 个扩展,新增 3 个扩展,更新 17 个扩展。
- 新增 Ubuntu 26.04
resolute支持,移除 Ubuntu 20.04focal支持。 - 将
el9.aarch64特例中的patroni/patroni-etcd提升到4.1.2。 - 校准上游软件仓库定义。
校验和
发布:https://github.com/pgsty/pig/releases/tag/v1.4.1
v1.4.0
- 刷新扩展目录,可用扩展总数增加到 510,并更新
timescaledb 2.26.3、decoderbufs 3.5.0、pgclone 4.0.0、nominatim_fdw 1.3等版本。 - 默认
pgrx从0.17.0升级到0.18.0,同步对齐相关 Rust 扩展构建版本。 - 为
pig build get刷新权威源码包映射,覆盖 Cloudberry / OrioleDB 构建输入,以及 RDKit / OneSparse 相关附加源码。 - 修复
repo set标志位隔离问题,并修正 PostgreSQL schema 级维护 SQL。 el9.aarch64上的patroni升级到4.1.1。
校验和
发布:https://github.com/pgsty/pig/releases/tag/v1.4.0
v1.3.4
扩展数量更新至 504 个。
校验和
发布:https://github.com/pgsty/pig/releases/tag/v1.3.4
v1.3.3
- 扩展目录刷新,可用扩展总数增加到 481 个。
- Go 工具链从
1.26.0升级到1.26.2。
扩展更新
| 扩展名 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
timescaledb | 2.25.2 | 2.26.2 | 正常,PG15-18 |
pg_background | 1.8 | 1.9.2 | 仅 DEB,PG14-18 |
pg_ivm | 1.13 | 1.14 | 升级,PG14-18 |
system_stats | 3.2 | 4.0 | 升级,PG14-18 |
nominatim_fdw | 1.1.0 | 1.2 | 升级,PG14-18 |
pg_textsearch | 0.5.0 | 1.0.0 | PG17-18 |
pg_clickhouse | 0.1.5 | 0.1.10 | 正常,PG14-18 |
pg_search | 0.22.2 | 0.22.6 | 手工下载,PG15-18 |
pg_store_plans | 1.9 | 1.10 | 升级,PG14-18 |
pg_dispatch | 0.1.5 | 新增,PG14-18 | |
pg_fsql | 1.1.0 | 新增,PG14-18 | |
pg_liquid | 0.1.7 | 新增,PG14-18 | |
pg_regresql | 2.0.0 | 新增,PG14-18 | |
pg_slug_gen | 1.0.0 | 新增,PG15-18 | |
pg_stat_ch | 0.3.3 | 新增,PG16-18 | |
pg_variables | 1.2.5 | 新增,PG14-18 | |
pgcalendar | 1.1.0 | 新增,PG14-18 | |
pgclone | 2.2.0 | 新增,PG14-18 | |
pgelog | 1.0.2 | 新增,PG14-18 | |
pglock | 1.0.0 | 新增,PG14-18 | |
pgproto | 0.2.1 | 新增,PG14-18 | |
postgresbson | 2.0.2 | 新增,PG14-18 | |
rdf_fdw | 2.4.0 | 新增,PG14-18 | |
parray_gin | 1.4.0 | 新增,PG14-18 |
校验和
发布:https://github.com/pgsty/pig/releases/tag/v1.3.3
v1.3.2
例行维护版本。
- 例行刷新部分扩展版本元数据与扩展目录条目,扩展版本更新。
- 新增
pig pg tune子命令,可根据硬件资源与工作负载画像生成 PostgreSQL 调优参数建议。 - 为
pig build get新增pdu与pgdog两个源码包 alias。 - 调整 pgext.cloud 的 URL 至新版本的扩展目录 pigsty.io/ext
校验和
发布:https://github.com/pgsty/pig/releases/tag/v1.3.2
v1.3.1
这是从 v1.3.0 到 v1.3.1 的一次小型维护版本。
- 由于 PGDG 上游已移除 PG13 归档与分发,pig 同步移除 PG13 安装/构建支持。
- 活跃支持的 PostgreSQL 主版本现在为 14-18。
- 扩展目录刷新(
461 -> 464),新增pg_pinyin、pg_eviltransform、qos。 - Percona PPG 上游仓库更新到
18.3。 - 修复
pig build依赖/构建同步问题,rsync 增加--keep-dirlinks参数。 - YUM 仓库中 Nginx 从
infra模块拆分为独立模块索引(nginx)。
校验和
发布:https://github.com/pgsty/pig/releases/tag/v1.3.1
v1.3.0
这是从 v1.2.0 到 v1.3.0 的一次工程强化与目录扩展版本:15 commits、74 files changed、代码行 +1184 / -236。
该版本重点围绕 pig build 构建链路和 ext 目录/别名能力增强,并将可用扩展数量从 451 增加到 461。
主要变化
- 构建源码下载增强(
pig build get):- 支持从扩展
Source字段解析多源码(空格/换行/Tab 分隔)并去重。 - 新增
agensgraph/agentsgraph源码映射。 pgedge构建源码改为同时下载postgresql-17.9.tar.gz与spock-5.0.5.tar.gz。
- 支持从扩展
- 依赖解析与安装优化(
pig build dep):- RPM 依赖安装可从 spec 的
pgmajorversion宏推断 PG 主版本,spec 缺失改为显式报错。 - DEB 依赖解析支持
Build-Depends/Build-Depends-Arch/Build-Depends-Indep的多行、候选依赖、架构限定与 profile 清理。 - 支持
PGVERSION占位符自动展开(优先--pg,其次已安装版本与扩展元数据)。 - 依赖安装失败降级为 warning,批量流程继续执行。
- RPM 依赖安装可从 spec 的
- DEB 构建结果判定修正(
pig build ext/pkg):- 构建命令退出码成功即判定成功,产物发现改为 best-effort 警告,避免误判失败。
- 成功但无产物时不再显示空包列表横幅;部分产物场景标记 warning 而非 fail。
- 构建日志中的源码与版本显示改为读取扩展元数据真实值,避免错误拼接
name-version。
- 扩展操作输出语义改进(
pig ext rm/update):- 别名解析后,
removed/updated返回值改为“实际包名”,方便自动化脚本精确比对。
- 别名解析后,
- 扩展目录与别名更新:
- 新增别名:
agensgraph/agens、pgedge、babelfishpg。 openhalodb对齐 PG14 包命名,ivorysqldb命名对齐。- fork 元数据与可用性矩阵批量刷新(含
timescaledb、pgmq、orioledb、documentdb、pg_tde、babelfishpg_*等条目)。
- 新增别名:
- 工程与发布:
- 版本号提升到
v1.3.0(包含v1.2.1过渡提交),版权年份更新到 2026,README 同步更新到 461 扩展与最新 alias 说明。
- 版本号提升到
兼容性提醒
pig ext rm/update结构化输出中的removed/updated字段由扩展名切换为包名;如果你的自动化逻辑按扩展别名匹配,请同步调整。
新增扩展(451 -> 461)
| 扩展名 | 版本 | 说明 |
|---|---|---|
aux_mysql | 1.5 | openHalo MySQL 兼容辅助模块(PG14) |
gb18030_2022 | 1.0 | IvorySQL 编码转换模块 |
ivorysql_ora | 1.0 | IvorySQL Oracle 兼容扩展 |
ora_btree_gin | 1.0 | Oracle 类型 GIN 索引支持 |
ora_btree_gist | 1.0 | Oracle 类型 GiST 索引支持 |
pg_get_functiondef | 1.0 | 获取函数定义 |
plisql | 1.0 | PL/iSQL 过程语言 |
snowflake | 2.4 | pgEdge Snowflake ID 生成扩展 |
spock | 5.0.5 | pgEdge 多主逻辑复制扩展 |
lolor | 1.2.2 | pgEdge 大对象逻辑复制兼容扩展 |
完整提交列表(v1.2.0..v1.3.0)
b8ecf8d版本字符串更新到 1.2.155df9a4build/get支持多源码解析与 pgedge spock 源码da8e347新增 agensgraph 和 pgedge 别名86edbd7ext rm/update输出显示解析后的包名ef3c905build/dep改进 rpm/deb 依赖解析7144e09刷新 fork 元数据与可用性矩阵条目befffbfDEB 构建将成功命令视作权威结果33fd517DEB 成功但无产物时不再显示空包列表横幅3b450f2下载源码时避免将扩展名与版本错误拼接33847abext rm/update满足 staticcheck S1011b8b917d依赖安装失败降级为 warning8110c00调整ivorysqldb/babelfishpg别名fac9faf版本提升到 1.3.01f88f06版权年份更新为 2026c804757v1.3.0发布提交
校验和
发布:https://github.com/pgsty/pig/releases/tag/v1.3.0
v1.2.0
扩展目录与别名解析增强:
- 引入动态 PG 分类别名解析,按 PG 主版本选择别名映射。
- 引入 OS 维度别名覆盖(ansible/bootstrap),并在未知发行版回退中收敛为 PGDG-only。
- 新增
node/infra、babelfish/cloudberry等别名并更新扩展元数据,减少包解析歧义。
高风险操作计划预览:
- 新增
pig install --plan,支持结构化执行计划输出。 - 统一
pig pitr与 pgBackRestrepack/expire的计划预览语义。 - 新增 plan flag 一致性测试,确保子命令行为对齐。
- 新增
sty原生配置能力:- 新增
pig sty configure命令及完整执行流(preflight、参数处理、执行编排)。 - 统一
sty conf/configure行为,默认走原生实现并保留--raw回退。 - 补充 configure 主流程、preflight、路由与安装联动测试,提升可维护性。
- 新增
仓库/构建/可靠性修复:
- 修复 repo cache 在
os.Stat错误场景中的 nil dereference。 - 对齐 Ubuntu 与 Debian 仓库 channel 映射,补充 reload 镜像拉取超时控制。
- 加固
repo rm对 dotted module 名称的安全删除与路径校验。 - 修复
sty init与 build 相关符号链接保留、跨设备迁移与目标目录处理问题。 - 改进文本输出与矩阵配色渲染,修复 ext 命令空参数与空目标校验问题。
- 修复 repo cache 在
35 Commit,66 文件变更,代码行:
+5006 / -379PG 扩展与内核包更新
| 包名 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
timescaledb | 2.25.0 | 2.25.1 | |
citus | 14.0.0-3 | 14.0.0-4 | 使用最新官方版本重新构建 |
age | 1.7.0 | 1.7.0 | 新增 PG 17 的 1.7.0 版本支持 |
pg_background | - | 1.8 | 仅构建 DEB 包,RPM 来自 PGDG |
pgmq | 1.10.0 | 1.10.1 | 当前没有该扩展包 |
pg_search | 0.21.6 | 0.21.8 | 直接下载使用 |
oriolepg | 17.11 | 17.16 | OriolePG 内核更新 |
orioledb | beta12 | beta14 | 配套 OriolePG 17.16 |
cloudberry | - | 2.0.0 | 新增包 |
babelfishpg | - | 5.5.0 | 新增 BabelfishPG 包组 |
babelfish | - | 5.5.0 | 新增 Babelfish 兼容包 |
antlr4-runtime413 | - | 4.13 | 新增 Babelfish 依赖运行时 |
校验和
发布:https://github.com/pgsty/pig/releases/tag/v1.2.0
v1.1.0
该版本是从 v1.0.0 到 v1.1.0 的一次规划中架构级升级(79 commits,193 files 变更),
核心目标是把 pig 从“人类可用 CLI”推进到“Agent-native 可编排 CLI”。
新增七个扩展,总可用扩展数量达到 451 个。
新功能
- Agent-native 统一输出框架落地:引入全局
--output(text/yaml/json/json-pretty),为ext/repo/pg/pt/pb/pitr/status/version/context等命令提供统一Result结构、稳定状态码与可机器解析输出。 - 引入 ANCS(Agent Native Command Schema)元数据体系:为命令补齐
type/volatility/parallel/risk/confirm/os_user/cost等语义字段,help在结构化模式下可直接输出命令能力树,便于 Agent 自动发现能力与风险边界。 - 新增
pig context(pig ctx)环境快照命令:一次调用聚合主机、PostgreSQL、Patroni、pgBackRest、扩展信息,专门面向 Agent 工作流做上下文注入。 - Plan 能力从 PITR 扩展到更多高风险动作:新增
pig ext add/rm --plan、pig pg stop/restart --plan、pig pt switchover/failover --plan,并统一为可审阅执行计划(动作、影响面、风险、预期结果)。 - 结构化结果覆盖进一步完善:
pgbackrest info可嵌入原生 JSON 信息,Patroni/PostgreSQL/PITR/Repo/Ext 子系统的结构化返回与辅助 DTO 统一,兼容自动化消费。 - 兼容层增强:对
pg_exporter/pg_probe/do/sty等存量命令引入 legacy structured wrapper,在保留旧交互行为的同时提供结构化执行结果与输出捕获。 - Pigsty 版本更新至 v4.1.0
扩展更新
| 扩展 | 旧版本 | 新版本 |
|---|---|---|
| timescaledb | 2.24.0 | 2.25.0 |
| citus | 14.0.0-2 | 14.0.0-3 |
| pg_incremental | 1.2.0 | 1.4.1 |
| pg_bigm | 1.2-20240606 | 1.2-20250903 |
| pg_net | 0.20.0 | 0.20.2 |
| pgmq | 1.9.0 | 1.10.0 |
| pg_textsearch | 0.4.0 | 0.5.0 |
| pljs | 1.0.4 | 1.0.5 |
| sslutils | 1.4-1 | 1.4-2 |
| table_version | 1.11.0 | 1.11.1 |
| supautils | 3.0.2 | 3.1.0 |
| pg_math | 1.0 | 1.1.0 |
| pgsentinel | 1.3.1 | 1.4.0 |
| pg_uri | 1.20151224 | 1.20251029 |
| pgcollection | 1.1.0 | 1.1.1 |
| pg_readonly | 1.0.3 | 1.0.4 |
| timestamp9 | 1.4.0-1 | 1.4.0-2 |
| pg_uint128 | 1.1.1 | 1.2.0 |
| pg_roaringbitmap | 0.5.5 | 1.1.0 |
| plprql | 18.0.0 | 18.0.1 |
| pglinter | 1.0.1 | 1.1.0 |
| pg_jsonschema | 0.3.3 | 0.3.4 |
| pg_anon | 2.5.1 | 3.0.1 |
| vchord | 1.0.0 | 1.1.0 |
| pg_search | 0.21.4 | 0.21.6/0.21.7 |
| pg_graphql | 1.5.12-1 | 1.5.12-2 |
| pg_summarize | 0.0.1-2 | 0.0.1-3 |
| nominatim_fdw | - | 1.1.0 |
| pg_utl_smtp | - | 1.0.0 |
| pg_strict | - | 1.0.2 |
| pg_track_optimizer | - | 0.9.1 |
| pgmb | - | 1.0.0 |
Bug 修复
- 安全修复:修复
pig build proxy在异常地址输入下的解析 panic 问题。 - 安全修复:修复
pig pg log文件名路径穿越风险,阻止通过../../访问日志目录外文件。 - 安全加固:加强 installer/repo 路径处理与引号处理,降低路径注入与异常路径误用风险。
- 构建链路可靠性修复:
pig build get/pkg/ext在下载或构建失败时正确传递错误并返回非零退出码;修复 DEB 构建中pg_ver不匹配导致的误报失败。 - 仓库与目录刷新修复:
ext/repo reload支持静默镜像回退;repo add/set/rm在缓存更新失败时正确返回错误状态。 - 扩展管理修复:
ext update调整为显式目标更新并修复状态漂移问题;ext import将请求的 DEB 资源下载到指定 repo 目录。 - 输出与可观察性修复:修复结构化输出 exit code 与文本渲染一致性问题;修复
pg status权限处理与解析稳定性问题。
校验和
发布:https://github.com/pgsty/pig/releases/tag/v1.1.0
v1.0.0
本版本引入三组主要的新子命令(pig pg、pig pt、pig pb),用于管理 PostgreSQL、Patroni 和 pgBackRest,同时新增编排式 PITR 命令,并增强扩展可用性显示。
新增命令
pig pg- PostgreSQL 实例管理pg init/start/stop/restart/reload/status- 控制与管理 PostgreSQL 实例pg role/promote- 检测和切换实例角色(主库/从库)pg psql/ps/kill- 连接与会话管理pg vacuum/analyze/freeze/repack- 数据库维护操作pg log- 日志查看(list/tail/cat/less)
pig pt- Patroni 集群管理pt list/config- 查看集群状态与配置pt restart/reload/reinit- 管理集群成员pt switchover/failover- 集群切换操作pt pause/resume- 控制自动故障切换pt start/stop/status/log- Patroni 服务管理
pig pb- pgBackRest 备份管理pb info/ls- 查看备份信息pb backup/restore/expire- 备份操作pb create/upgrade/delete- Stanza 管理pb check/start/stop/log- 控制操作
pig pitr- 编排式时间点恢复- 自动协调 Patroni/PostgreSQL
- 多种恢复目标:时间、LSN、XID、还原点
- 支持计划预览模式与恢复后指引
新功能
- 为
pig ext avail和pig ext ls添加可用性矩阵
改进
- 统一 pg/pt/pb 命令别名风格
- 规范化错误消息格式
- 代码重构与清理
Bug 修复
- 修复 UTIL 扩展分类缺失问题
校验和
发布:https://github.com/pgsty/pig/releases/tag/v1.0.0
v0.8.0
扩展更新
- 扩展总数达到 440 个
- 新增扩展:pg_ai_query 0.1.1
- 新增扩展:pg_textsearch 0.1.0
- 新增扩展:pg_clickhouse 0.1.0
- pg_biscuit 从 1.0 升级至 2.0.1(切换至新仓库,更名为 biscuit)
- pg_search 从 0.20.3 升级至 0.20.5
- pg_duckdb 升级至官方正式版 1.1.1
- vchord_bm25 从 0.2.2 升级至 0.3.0
- pg_semver 从 0.40.0 升级至 0.41.0
- pg_timeseries 从 0.1.7 升级至 0.1.8
- 修复 debian/ubuntu pg18 扩展问题:supautils、pg_summarize、pg_vectorize、pg_tiktoken、pg_tzf、pglite_fusion、pgsmcrypto、pgx_ulid、plprql
- pigsty 版本号同步至 4.0.0
仓库更新
- 因上游变更移除 pgdg yum sysupdate 仓库
- 因上游变更移除 pgdg yum llvmjit 软件包
- 修复 el9.aarch64 上 patroni 3.0.4 重复软件包问题
- 为 el 仓库定义添加优先级,docker 仓库不可用时自动跳过
- 添加 epel 10 / pgdg 9/10 操作系统小版本热修复
校验和
发布:https://github.com/pgsty/pig/releases/tag/v0.8.0
v0.7.5
扩展更新
- timescaledb 2.23.1 -> 2.24.0
- pg_search 0.20.0 -> 0.20.3
- convert 0.0.4 -> 0.0.5
- pglinter 1.0.0 -> 1.0.1
- pgdd 0.6.0 -> 0.6.1
- pg_session_jwt 0.3.3 -> 0.4.0
- pg_anon 2.4.1 -> 2.5.1
- pg_enigma 0.4.0 -> 0.5.0
- wrappers 0.5.6 -> 0.5.7
- pg_vectorize 0.25.0 -> 0.26.0
仓库更新
使用修复后的阿里云 PGDG 镜像仓库
校验和
发布:https://github.com/pgsty/pig/releases/tag/v0.7.5
v0.7.4
- 更新扩展版本与元数据:
pg_search,pgmq,pg_stat_monitor - 更新 PGDG 仓库 URL 变化,
extras仓库现在位于 yum 仓库顶层 - 将 ivorysql 更新至 5.0 版本,与 PG 18 兼容
- 将 Percona Postgres TDE 内核更新至 18.1
Checksums
发布:https://github.com/pgsty/pig/releases/tag/v0.7.4
v0.7.3
- 新增 pig repo reload 命令,更新仓库元数据
- 修复 EL PGDG sysupdate aarch64 仓库问题。
- 修复 EL10.aarch64 PGDG 仓库重命名问题。
- 订正了若干扩展版本
- 更新 Pigsty 版本至 3.7.0
校验和
发布:https://github.com/pgsty/pig/releases/tag/v0.7.3
v0.7.2
批量更新扩展,数量达到 437 个
新增 PGDG EL10 Sysupdate 仓库
新增 LLVM APT 仓库
在 pig build 命令中使用可选的本地 extension.csv 扩展定义问题。
更新的扩展: vchord pg_later pgvectorscale pglite_fusion pgx_ulid pg_search citus timescaledb pg_profile pg_stat_monitor documentdb
新增的扩展:pglinter pg_typeid pg_enigma pg_retry pg_biscuit pg_weighted_statistics
校验和
发布:https://github.com/pgsty/pig/releases/tag/v0.7.2
v0.7.1
- 全新的网站: /ext/
- 修复了不必要的 sudo 使用问题,现在可以方便的在容器中使用
- 允许 pig ext link 命令使用形如 pg17 pg18 的参数形式
- 新增环境变量
PIG_NO_SUDO,强制不使用 sudo 执行命令 - RPM 变更日志:为几乎所有扩展新增 PG 18 支持
- DEB 变更日志:为几乎所有扩展新增 PG 18 支持
- Infra 变更日志:例行更新至最新版本
校验和
发布:https://github.com/pgsty/pig/releases/tag/v0.7.1
v0.7.0
- 提供针对 Debian 13 和 EL 10 发行版的支持
- 大批量扩展更新至最新版本,带有 PostgreSQL 18 支持。
- 几乎所有 Rust 扩展现已通过 pgrx 0.16.1 支持 PG 18
pig build命令彻底重做pig build pkg <pkg>现在会一条龙完成扩展的下载,依赖安装,构建pig build pgrx命令现在从pig build rust中分离pig build pgrx [-v pgrx_version]现在可以直接使用现有的 PG 安装pig build dep现在会处理 EL 和 Debian 系统下的扩展依赖pig build ext命令现在有了更为紧凑和美观的输出,可在 EL 下不依赖 build 脚本直接构建 RPMpig build spec现在支持直接从 Pigsty 仓库下载 spec 文件包pig build repo/pig repo add/pig repo set现在默认使用node,pgsql,infra仓库模块,取代原本的node,pgdg,pigsty
- 大量优化了错误日志记录。
- 基于 hugo 与 hextra 全新目录网站
校验和
发布:https://github.com/pgsty/pig/releases/tag/v0.7.0
v0.6.2
- 使用 PG 18 官方正式仓库取代原本的 Testing Beta 仓库 instead of testing repo
- 在接收 Pigsty 版本字符串的时候,自动添加
v前缀 - 改进了网络检查与下载的逻辑
校验和
发布:https://github.com/pgsty/pig/releases/tag/v0.6.2
v0.6.1
- 新增 el10 与 debian 13 trixie 的支持存根
- 专门的新文档网站: /ext/pig/
- 使用 go 1.25 重新构建,新增 CI/CD 管道
- 在中国大陆使用 PIGSTY PGDG 镜像
- 移除空的
pgdg-el10fix仓库 - 使用 Pigsty Babelfish 镜像
- 修复 EL 10 专用的 EPEL 仓库
- pig version 输出构建环境信息
发布:https://github.com/pgsty/pig/releases/tag/v0.6.1
v0.6.0
- 新扩展目录:https://ext.pgsty.com
- 新子命令:
pig install简化pig ext install - 添加新内核支持:带 pg_tde 的 percona
- 添加新包:Google GenAI MCP 数据库工具箱
- 添加新仓库:percona 仓库和 clickhouse 仓库
- 将扩展摘要信息链接更改为 https://ext.pgsty.com
- 修复 orioledb 在 Debian/Ubuntu 系统上的问题
- 修复 EL 发行版上的 epel 仓库
- 将 golang 升级到 1.24.5
- 将 pigsty 升级到 v3.6.0
校验和
发布:https://github.com/pgsty/pig/releases/tag/v0.6.0
v0.5.0
- 将扩展列表更新至 422 个
- 新扩展:来自 AWS 的 pgactive
- 将 timescaledb 升级到 2.20.3
- 将 citus 升级到 13.1.0
- 将 vchord 升级到 0.4.3
- 修复错误:pgvectorscale debian/ubuntu pg17 失败
- 将 kubernetes 仓库升级到 1.33
- 将默认 pigsty 版本升级到 3.5.0
校验和
发布:https://github.com/pgsty/pig/releases/tag/v0.5.0
v0.4.2
- 将扩展列表更新至 421 个
- 为 Debian / Ubuntu 添加 openhalo/orioledb 支持
- pgdd 0.6.0 (pgrx 0.14.1)
- convert 0.0.4 (pgrx 0.14.1)
- pg_idkit 0.3.0 (pgrx 0.14.1)
- pg_tokenizer.rs 0.1.0 (pgrx 0.13.1)
- pg_render 0.1.2 (pgrx 0.12.8)
- pgx_ulid 0.2.0 (pgrx 0.12.7)
- pg_ivm 1.11.0 适用于 debian/ubuntu
- orioledb 1.4.0 beta11
- 重新添加 el7 仓库
校验和
发布:https://github.com/pgsty/pig/releases/tag/v0.4.2
v0.4.1
- 将扩展列表更新至 414 个
- 在
pig ext scan映射中添加citus_wal2json和citus_pgoutput - 添加 PG 18 beta 仓库
- 添加 PG 18 包别名
发布:https://github.com/pgsty/pig/releases/tag/v0.4.1
v0.4.0
- 更新扩展列表,可用扩展达到 407 个
- 添加
pig do子命令用于执行 Pigsty playbook 任务 - 添加
pig pt子命令用于包装 Patroni 命令行工具 - 添加扩展别名:
openhalo和orioledb - 添加
gitlab-ce/gitlab-ee仓库区分 - 使用最新 Go 1.24.2 构建并升级依赖项版本
- 修复特定条件下
pig ext status的 panic 问题 - 修复
pig ext scan无法匹配多个扩展的问题
发布:https://github.com/pgsty/pig/releases/tag/v0.4.0
v0.3.4
- 常规扩展元数据更新
- 使用阿里云 epel 镜像代替损坏的清华大学 tuna 镜像
- 升级 pigsty 版本字符串
- 在仓库列表中添加
gitlab仓库
发布:https://github.com/pgsty/pig/releases/tag/v0.3.4
v0.3.3
- 添加
pig build dep命令安装扩展构建依赖项 - 更新默认仓库列表
- 为
mssql模块(babelfish)使用 pigsty.io 镜像 - 将 docker 模块合并到
infra - 从 el7 目标中移除 pg16/17
- 允许在 el7 中安装扩展
- 更新包别名
发布:https://github.com/pgsty/pig/releases/tag/v0.3.3
v0.3.2
增强功能
- 新扩展
- 使用
upx减少二进制大小 - 移除嵌入的 pigsty 以减少二进制大小
发布:https://github.com/pgsty/pig/releases/tag/v0.3.2
v0.3.1
常规错误修复
- 修复仓库格式字符串
- 修复扩展信息链接
- 更新 pg_mooncake 元数据
发布:https://github.com/pgsty/pig/releases/tag/v0.3.1
v0.3.0
pig 项目现在有了新的 主页,以及 PostgreSQL 扩展 目录。
发布:https://github.com/pgsty/pig/releases/tag/v0.3.0
v0.2.2
Pig v0.2.2 中提供 404 个扩展
发布:https://github.com/pgsty/pig/releases/tag/v0.2.2
v0.2.0
发布:https://github.com/pgsty/pig/releases/tag/v0.2.0
v0.1.4
发布:https://github.com/pgsty/pig/releases/tag/v0.1.4
v0.1.3
v0.1.3,常规更新,现在可用 390 个扩展!
发布:https://github.com/pgsty/pig/releases/tag/v0.1.3
v0.1.2
351 个 PostgreSQL 扩展,包括强大的 postgresql-anonymizer 2.0
发布:https://github.com/pgsty/pig/releases/tag/v0.1.2
v0.1.1
更新扩展列表。
发布:https://github.com/pgsty/pig/releases/tag/v0.1.1
v0.1.0
pig CLI v0.1 发布
发布:https://github.com/pgsty/pig/releases/tag/v0.1.0
v0.0.1
创世发布
发布:https://github.com/pgsty/pig/releases/tag/v0.0.1
5 - pig
pig CLI 提供了全面的工具集,用于管理 PostgreSQL 安装、扩展、软件仓库以及从源码构建扩展。使用 pig help <command> 查看命令文档。
- pig repo:管理软件仓库
- pig ext:管理 PostgreSQL 扩展
- pig build:从源码构建扩展
- pig install:使用原生包管理器安装包,并对 PostgreSQL 别名做翻译
- pig sty:管理 Pigsty 安装与 Grafana 仪表盘
- pig inventory:检视、编辑、校验与交换 Pigsty 配置清单(v1.6.0 新增)
- pig do:执行 Pigsty 管理 playbook 任务
- pig pe:访问 pg_exporter 指标与配置
- pig pg:管理本地 PostgreSQL 服务器
- pig pt:透明运行 patronictl,附带服务与配置辅助命令
- pig pb:管理 pgBackRest 备份与恢复
- pig pitr:进行完整 PITR 工作流
- pig context:输出面向人工和 Agent 的环境上下文快照
- pig status / update / version:查看环境、升级 pig、打印版本信息
概览
pig repo
管理 PostgreSQL 软件包的 APT/YUM 仓库,详情请参考 pig repo
pig ext
管理 PostgreSQL 扩展和内核包,详情请参考 pig ext
pig build
从源码构建 PostgreSQL 扩展,详情请参考 pig build
pig install
使用系统原生包管理器安装软件包,并对 PostgreSQL 内核、扩展及常用别名做包名翻译。需要直接传递系统包名时,可使用 -n/--no-translation。
pig sty
安装 Pigsty 发行版,详情请参考 pig sty
pig inventory
检视、编辑、校验、体检并与 CMDB 交换 Pigsty 配置清单(pigsty.yml),根级命令组,别名 inv,
详情请参考 pig inventory。(v1.6.0 新增)
pig do
执行 Pigsty 管理任务,底层调用对应的 Ansible playbook。
pig pe
访问 pg_exporter 暴露的 PostgreSQL 监控指标,默认连接 127.0.0.1:9630。
pig context
输出环境上下文快照,覆盖主机、PostgreSQL、Patroni、pgBackRest 与已安装扩展。该命令适合排障和自动化脚本快速了解当前节点状态。
pig pg
管理本地 PostgreSQL 服务器,详情请参考 pig pg
pig pt
透明运行 patronictl 管理 Patroni HA 集群,详情请参考 pig pt
pig pb
管理 pgBackRest 备份与恢复,详情请参考 pig pb
pig pitr
执行编排式时间点恢复(PITR),详情请参考 pig pitr
辅助命令
6 - pig repo
pig repo 命令是一个综合性的软件包仓库管理工具。它提供了添加、移除、创建和管理软件仓库的功能,支持 RPM 系统(RHEL/CentOS/Rocky/Alma)和 Debian 系统(Debian/Ubuntu)。
| 命令 | 描述 | 备注 |
|---|---|---|
repo list | 打印可用仓库与模块列表 | |
repo info | 获取仓库详细信息 | |
repo status | 显示当前仓库状态 | |
repo add | 添加新仓库 | 需要 sudo 或 root 权限 |
repo set | 清空、覆盖并更新仓库 | 需要 sudo 或 root 权限 |
repo rm | 移除仓库 | 需要 sudo 或 root 权限 |
repo update | 更新仓库缓存 | 需要 sudo 或 root 权限 |
repo create | 创建本地 YUM/APT 仓库 | 需要 sudo 或 root 权限 |
repo cache | 从本地仓库创建离线包 | 需要 sudo 或 root 权限 |
repo boot | 从离线包引导仓库 | 需要 sudo 或 root 权限 |
repo reload | 刷新仓库目录 |
快速入门
模块
在 pig 中,APT/YUM 仓库被组织为 模块 —— 服务于特定目的的一组仓库。
| 模块 | 说明 | 仓库列表 |
|---|---|---|
all | 安装 PG 所需的全部核心模块 | node + infra + pgsql |
pgsql | PGDG + Pigsty PG 扩展 | pigsty-pgsql + pgdg |
pigsty | Pigsty Infra + PGSQL 仓库 | pigsty-infra, pigsty-pgsql |
pgdg | PGDG 官方仓库 | pgdg-common, pgdg14-18 |
node | Linux 系统仓库 | base, updates, extras, epel, baseos, appstream… |
infra | 基础设施组件仓库 | pigsty-infra, nginx, docker-ce |
docker | Docker 仓库 | docker-ce |
beta | PostgreSQL 19 Beta 版本 | pgdg19-beta, pgdg-beta |
extra | PGDG Non-Free 与三方扩展 | pgdg-extras, timescaledb, citus |
groonga | PGroonga 仓库 | groonga |
mssql | Wiltondb 仓库(已弃用) | babelfish |
percona | Percona PG + PG_TDE | percona |
llvm | LLVM 工具链仓库 | llvm |
kube | Kubernetes 仓库 | kubernetes |
grafana | Grafana 仓库 | grafana |
haproxy | HAProxy 仓库 | haproxyd, haproxyu |
redis | Redis 仓库 | redis |
mongo | MongoDB 仓库 | mongo |
mysql | MySQL 仓库 | mysql |
click | ClickHouse 仓库 | clickhouse |
gitlab | GitLab 仓库 | gitlab-ce, gitlab-ee |
除此之外,pig 还自带了一些其他数据库的 APT/DNF 仓库:redis, kubernetes, grafana, clickhouse, gitlab, haproxy, mongodb, mysql,在此不再展开。
通常来说,为了安装 PostgreSQL node (Linux 系统仓库) 和 pgsql(PGDG + Pigsty)是必选项,infra 仓库是可选项(包含了一些工具,IvorySQL Kernel 等)。
您可以使用特殊的 all 模块,一次性添加所有需要的仓库到系统中,对绝大多数用户来说,这是合适的起点。
仓库定义
Pigsty 中可用仓库的完整定义位于 cli/repo/assets/repo.yml。
您可以创建 ~/.pig/repo.yml 文件,显式修改并覆盖 pig 的仓库定义。在编辑仓库定义文件时,您可以在 baseurl 处添加额外的区域镜像,例如指定中国、欧洲地区的镜像仓库 URL。当 pig 使用 --region 参数指定特定区域时,会优先查找对应区域的仓库 URL,不存在时回退到 default。从 v1.7.0 起,-m|--mirror 会明确选择内置的 china 定义,包括 pigsty.cc 与维护中的国内镜像,不再在运行时将 PGDG URL 改写到代理端点。
普通 EL 仓库保留 DNF 原生模块过滤。只有显式声明 module_hotfixes=1 的定义(主要是 Pigsty 与 PGDG 仓库)会覆盖模块流;渲染 EL7 YUM 配置时会移除该键。
repo list
pig repo list 将列出当前系统可用的所有仓库模块。
repo info
显示特定仓库或模块的详细信息,包括 URL、元数据和区域镜像,以及 .repo / .list 仓库文件内容。
repo status
显示系统上的当前仓库配置。
repo add
添加仓库配置文件到系统。需要 root/sudo 权限。
选项:
-r|--remove:添加新仓库前移除现有仓库-u|--update:添加仓库后运行包缓存更新-m|--mirror:明确选择内置的china仓库定义--region <region>:使用区域镜像仓库(default/china/europe)
| 平台 | 模块位置 |
|---|---|
| EL | /etc/yum.repos.d/<module>.repo |
| Debian | /etc/apt/sources.list.d/<module>.list |
repo set
等同于 repo add --remove --update。清空现有仓库并设置新仓库,然后更新缓存。
repo set 支持与 repo add 相同的 --region 与 -m|--mirror 区域选择;它始终是覆盖式语义,相当于 repo add all --remove --update。
repo rm
移除仓库配置文件并备份它们。
| 平台 | 备份位置 |
|---|---|
| EL | /etc/yum.repos.d/backup/ |
| Debian | /etc/apt/sources.list.d/backup/ |
repo update
更新包管理器缓存以反映仓库更改。
| 平台 | 等效命令 |
|---|---|
| EL | dnf makecache |
| Debian | apt update |
repo create
为离线安装创建本地包仓库。
当前实现会优先使用 PATH 中的 sow。在 Linux 上选择 SOW 后,会对每个目标目录以 sudo 执行等价命令:
在 macOS 上必须安装 SOW,执行时不使用 sudo,默认目标为当前目录。Linux 上如果没有安装 sow,EL 会回退到 createrepo_c,Debian/Ubuntu 会回退到 dpkg-dev 提供的 dpkg-scanpackages;首选后端与平台回退均不可用时,pig repo create 才会失败。SOW 一旦被选中,其执行错误会直接返回,不会再用旧后端重试。10m 只限制等待 SOW 目录锁的时间,并不限制仓库索引本身的执行时间。
SOW 的 --pigsty 事务会:
- 只扫描顶层普通
.rpm与.deb文件,不递归,也不跟随符号链接。 - 按解析后的软件包事实,删除 32 位 x86 包(RPM 的
i386/i486/i586/i686、DEB 的i386),以及二进制包名恰为patroni、上游版本恰为3.0.4的包。 - 以原子方式生成对应的 RPM/DEB 元数据,最后写入
repo_complete;marker 按 basename 排序,记录剩余顶层软件包的 SHA-256。
非软件包文件与目录不会被改动;候选软件包无法解析或逻辑坐标冲突时,SOW 事务会失败关闭。旧版回退脚本的清理与元数据语义不同,并在 repo_complete 中写入软件包的 MD5 列表。任一后端退出后,PIG 都会要求 repo_complete 存在且为普通文件,但不会校验 marker 内容或其中哈希。若交付流程把 marker 当作放行条件,调用方应自行完成这些验证。
repo cache
创建仓库内容的压缩 tarball 用于离线分发。
选项:
-d, --dir:源目录(默认:/www/)-p, --path:输出路径(默认:/tmp/pkg.tgz)
repo boot
从离线包解压并设置本地仓库。
选项:
-p, --path:包路径(默认:/tmp/pkg.tgz)-d, --dir:目标目录(默认:/www/)
repo reload
从 GitHub 刷新仓库元数据到最新版本。
更新后的文件会放置于 ~/.pig/repo.yml 中。
7 - pig ext
pig ext 命令是一个用于管理 PostgreSQL 扩展的全能工具。它允许用户搜索、安装、移除、更新和管理 PostgreSQL 扩展,甚至支持内核包的管理。
| 命令 | 描述 | 备注 |
|---|---|---|
ext list | 搜索扩展 | |
ext info | 显示扩展详细信息 | |
ext avail | 显示扩展可用性矩阵 | |
ext status | 显示已安装的扩展 | |
ext scan | 扫描已安装的扩展 | |
ext add | 安装扩展 | 需要 sudo 或 root 权限 |
ext rm | 移除扩展 | 需要 sudo 或 root 权限 |
ext update | 更新扩展 | 需要 sudo 或 root 权限 |
ext import | 下载扩展以供离线使用 | 需要 sudo 或 root 权限 |
ext link | 链接 PG 版本到 PATH | 需要 sudo 或 root 权限 |
ext reload | 刷新扩展目录 |
快速入门
在安装 PostgreSQL 扩展前,你需要先添加 pig repo add:
然后你可以搜索并安装 PostgreSQL 扩展:
可用扩展及其名称请查阅 扩展列表。
使用说明:
- 未指定 PostgreSQL 版本时,工具会尝试从
PATH中的pg_config自动检测当前活动的 PostgreSQL 安装。 - PostgreSQL 可通过主版本号(
-v)或 pg_config 路径(-p)指定。- 若指定
-v,pig 会使用该版本 PGDG 内核包的默认路径。- EL 发行版为
/usr/pgsql-$v/bin/pg_config, - DEB 发行版为
/usr/lib/postgresql/$v/bin/pg_config等。
- EL 发行版为
- 若指定
-p,则直接用该路径定位 PostgreSQL。
- 若指定
- 扩展管理器会根据操作系统自动适配不同的包格式:
- RHEL/CentOS/Rocky Linux/AlmaLinux 使用 RPM 包
- Debian/Ubuntu 使用 DEB 包
- 某些扩展可能有依赖项,安装时会自动解决。
- 谨慎使用
-y参数,它会自动确认所有提示。
Pigsty 假定你已安装官方 PGDG 内核包,如未安装,可用如下命令:
ext list
列出(或搜索)扩展目录中的可用扩展。
分类筛选通过查询参数直接指定分类名实现,支持的分类包括:time, gis, rag, fts, olap, feat, lang, type, func, util, admin, stat, sec, fdw, sim, etl。
选项:
-v|--version:按 PG 版本筛选--pkg:显示包名而非扩展名,仅列出主导扩展
Status 列说明:
installed:扩展已安装(绿色)available:扩展可用但未安装(黄色)not avail:扩展在当前系统不可用(红色)
默认扩展目录定义在 cli/ext/assets/extension.csv。
可用 pig ext reload 命令更新到最新扩展目录,数据将下载到 ~/.pig/extension.csv;在线最新版目录同步发布于 pigsty.io/ext/data/extension.csv。
ext info
显示指定扩展的详细信息。
ext avail
显示扩展的可用性矩阵,展示扩展在不同操作系统、架构和 PostgreSQL 版本上的可用情况。
可用性矩阵会显示扩展在各个操作系统(EL8/9/10, Debian 12/13, Ubuntu 22/24/26)、架构(x86_64/aarch64)和 PostgreSQL 版本(14-18)上的可用情况。
ext status
显示当前 PostgreSQL 实例已安装扩展的状态。
选项:
-c|--contrib:结果中包含 contrib 扩展
ext scan
扫描当前 PostgreSQL 实例已安装的扩展。
该命令会扫描 postgres 扩展目录,查找所有实际已安装的扩展。
ext add
安装一个或多个 PostgreSQL 扩展。pig ext add 的同级别名包括 pig ext install、pig ext ins 与 pig ext a。顶层 pig install 是另一个原生包管理器包装命令,也支持 PostgreSQL 与扩展包 alias 翻译。
选项:
-v|--version:指定 PG 大版本-y|--yes:自动确认安装--plan:预览安装计划,不执行包管理器命令
ext rm
移除一个或多个 PostgreSQL 扩展。
选项:
-v|--version:指定 PG 大版本-y|--yes:自动确认移除--plan:预览移除计划,不执行包管理器命令
ext update
将指定的已安装扩展更新到最新版。出于安全考虑,无参数 pig ext update 不会更新所有扩展,而是 no-op;必须显式写出要更新的目标。
选项:
-v|--version:指定 PG 大版本-y|--yes:自动确认更新-m|--mirror:优先使用pigsty.cc镜像作为更新来源
ext import
下载扩展包到本地仓库,便于离线安装。
选项:
-d|--repo:指定仓库目录(默认:/www/pigsty)
ext link
将指定 PG 版本链接到系统 PATH。
该命令会创建 /usr/pgsql 软链接,并写入 /etc/profile.d/pgsql.sh。
ext reload
刷新扩展元数据。
更新后的文件会放置于 ~/.pig/extension.csv 中。
8 - 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 | 初始化构建代理 | |
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
为受限互联网访问的构建环境设置代理配置。
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 |
9 - pig sty
pig 也可作为 Pigsty 的命令行工具使用 —— 这是一款开箱即用的免费 PostgreSQL RDS 解决方案。 它为你的 PostgreSQL 集群带来高可用(HA)、PITR、监控、基础设施即代码(IaC)以及丰富的扩展支持。
| 命令 | 描述 | 备注 |
|---|---|---|
sty init | 安装 Pigsty | |
sty boot | 原生引导 Pigsty 控制节点 | 需要时自动提权至 root |
sty conf | 原生生成并校验 Inventory | Go 工作流 |
sty deploy | 运行部署 playbook | |
sty list | 列出可用 Pigsty 版本 | |
sty get | 下载 Pigsty 源码压缩包 | |
sty grafana | 管理 Grafana 仪表盘(别名 gf) | v1.6.0 新增 |
v1.8.0 起,
pig sty boot与pig sty conf均由 Go 原生实现,不再调用 Pigsty 旧版bootstrap/configureShell 脚本。v1.6.0 起,原先的pig sty edit/validate/check已上移为根级pig inventory命令组;实验性的pig sty dashboard由pig sty grafana取代。
快速入门
你可以使用 pig sty 子命令在当前节点引导部署 Pigsty。
详细入门指南请参阅:https://pigsty.cc/docs/setup/install/
sty boot 会以尽力而为的方式初始化缺失的默认 ~/pigsty 目录。若需要指定 Pigsty
版本或安装路径,请先显式执行 pig sty init。
sty init
下载并安装 Pigsty 发行版到 ~/pigsty 目录。
选项:
-p|--path:目标安装目录(默认 “~/pigsty”)-f|--force:强制覆盖已存在的 pigsty 目录-m|--mirror:优先使用pigsty.cc镜像源-v|--version:pigsty 版本号-d|--dir:下载目录(默认 “/tmp”)
sty boot
使用 Go 原生工作流引导 Pigsty 控制节点。该命令能够准备可用的 Ansible 环境、处理在线与
离线仓库、修复常见控制节点前置条件,并返回结构化结果;整个过程不再委托给 Pigsty 旧版
bootstrap 脚本,下载与解压软件包也不依赖 curl、wget、tar 或 gzip。
命令可以不带 sudo 直接调用:Pig 会先解析并下载显式来源,需要 root 权限时再通过 sudo
进行一次自重启。设置 PIG_NO_SUDO=1 可禁用自动提权;设置 PIG_NON_INTERACTIVE=1 可让
sudo 使用非交互模式。
引导阶段
原生工作流依次完成:
- 在 Debian 12/13 上尽可能检查并修复
en_US.UTF-8,避免 Ansible 因继承到坏 locale 而无法启动。 - 实际执行
ansible-playbook,发现它使用的 Python 解释器,并校验yaml、jmespath, 以及cryptography或OpenSSL两者之一;仅有二进制文件但无法运行,不会被判定为就绪。 - 解析仓库来源,按需准备离线内容,并且只在 Ansible 缺失或不可用时安装精简的控制节点软件包集。
- 安装后再次校验 Ansible;如果新软件包补齐了 locale 工具,也会重试 locale 准备。
- 探测控制节点辅助工具,为发起调用的管理员用户修复到
127.0.0.1的密钥 SSH,并尽可能 初始化缺失的默认~/pigsty目录。
即使 Ansible 已经可用,显式指定、自动发现或已经提交的离线来源仍会被准备,因此可以在一个
已经就绪的控制节点上使用 sty boot 预置离线仓库。
来源选择与工作模式
结果中会记录以下四种引导模式之一:
| 模式 | 含义 |
|---|---|
ready | Ansible 已经可用,也不需要准备离线来源。 |
offline | 选择了显式、可信自动发现或已提交的离线仓库。 |
online | 配置所选区域的在线仓库以修复控制节点。 |
existing | 使用 --keep 在线刷新失败后,成功回退到现有仓库定义。 |
来源优先级与安全规则是确定的:
--path接受本地归档或 HTTP(S) URL。包含凭据的 URL 会被拒绝;显式来源无效时直接失败, 不会悄悄回退到在线模式。- 自动发现的
/tmp/pkg.tgz必须是普通文件,不可被组或其他用户写入,且属主为 root 或发起 sudo 的用户;不安全的候选会被忽略并产生告警。 - 已完整提交的
/www/pigsty仓库优先于选中的离线包;两者同时存在时复用现有仓库,离线包 保持不动并给出告警。 - Pig 使用 Go 原生能力下载并解压归档。如果
/www不存在,会先创建/data/nginx与预期的/www -> /data/nginx符号链接,再提交仓库内容。
离线模式只启用严格的 pigsty-local 仓库;在线模式配置所选区域,安装 Pigsty 内嵌签名密钥并
启用仓库签名校验,同时安装 node 与 pigsty 控制节点模块。
仓库事务与失败边界
默认策略会在替换仓库定义前创建备份。仓库配置或软件包安装失败时,Pig 会尝试恢复备份,并在
结果中明确标记回滚成功或失败。--keep 会切换为增量策略:保留现有定义,在线刷新失败时可以
回退到已有仓库,也不需要执行替换回滚。
显式来源无效、需要安装时软件包管理器不受支持、仓库或软件包操作失败,以及安装后 Ansible 仍不可用,都会让命令失败。locale 修复、可选辅助工具探测、本机 SSH 修复与 Pigsty 目录初始化 属于建议性收尾步骤;失败只会作为告警保留,不会否定已经可用的控制节点。
选项:
-r|--region:区域(default, china, europe…)-m|--mirror:等价于--region china;不能与--region同时使用-p|--path:离线包文件或 HTTP(S) URL;显式指定的来源无效时直接失败-k|--keep:保留现有仓库定义,不执行替换
结构化输出
自动化场景可使用全局 -o json 或 -o yaml。结果类型为 pig.sty.boot/v2,包含 Ansible
状态、工作模式与软件包管理器、仓库策略与回滚结果、来源与仓库路径、locale、本机 SSH 与
Pigsty 目录初始化状态、是否发生变更、告警,以及以下后续建议:
结构化模式会抑制动态进度信息,保证 stdout 可以直接被程序解析。
详见:https://pigsty.cc/docs/setup/offline/#bootstrap
sty conf
使用 Go 原生工作流生成 Pigsty Inventory。sty conf 从 <PIGSTY_HOME>/conf 下读取一个模板,
执行有边界的结构化变更,校验完整候选配置,最后原子写入仅属主可读的 Inventory;它不会调用或
回退到 ./configure。
默认模式为 meta;pig sty c 与 pig sty configure 是命令别名。注意大写 -O 用于指定
Inventory 输出文件,全局小写 -o 用于选择 text、JSON 或 YAML 命令输出。
模板与输出安全
- 模式必须是
<PIGSTY_HOME>/conf下用斜杠分隔的安全相对名称,.yml后缀可省略;绝对路径、 目录穿越、空路径段与路径逃逸都会被拒绝。 - 相对输出路径基于
<PIGSTY_HOME>解析,绝对输出路径保持不变。 - 目标文件不能通过相同路径、已有符号链接、带符号链接的父目录或硬链接指回源模板;已有输出 符号链接一律拒绝。
- Pig 会先解析源模板并拒绝冲突的 IP 映射,再执行外部预检。解析、变更、预检或校验失败均不 会改动目标文件。
- 成功结果以
0600权限原子写入。
结构化变更
命令操作解析后的 YAML 结构与有边界的标量,而不是进行宽泛的文本替换:
| 输入 | 原生行为 |
|---|---|
--ip A,B,... | 最多接收十个互不相同的地址,依次映射到 10.10.10.10 至 10.10.10.19;替换同时完成,因此地址互换安全,VIP 等无关地址保持不变。 |
未指定 --ip | 探测本机网卡;候选不唯一时交互选择,--non-interactive 或 stdin 已关闭时则失败并提示使用 --ip。 |
--domain NAME | 只替换精确的 i.pigsty,不会误改 cli.pigsty 或 i.pigsty.cc;NAME 必须是合法 DNS 域名。 |
| 小规格控制节点 | 探测到 CPU 少于四核时,将 node_tune: oltp 与 pg_conf: oltp.yml 改为对应的 tiny 配置。 |
--region REGION | 非默认区域会更新 all.vars.region;china 还会启用模板中已有的 Docker 与 pip 镜像值,但不会凭空补造模板中不存在的配置。 |
--proxy | 将非空的 HTTP_PROXY/http_proxy、HTTPS_PROXY(缺失时回退到 ALL_PROXY)、ALL_PROXY 与 NO_PROXY 写入 all.vars.proxy_env;必要时补充安全的默认 no-proxy 列表。 |
--version MAJOR | 通用模板支持 PostgreSQL 14-18,以及显式指定的 19 beta,并选择匹配的 locale;版本固定的 mssql、polar 与 pgNN 模式保留模板版本并给出告警。 |
--generate | 每个已知凭据标识符生成一个 24 位随机值,并一致替换其生效值和文档化占位符。 |
如果某个 IP 映射会与未替换的 Inventory 键冲突,命令会按无效参数拒绝执行。某个已提供地址在 模板中没有对应占位槽时,不会被静默忽略,而是作为 discarded-IP 告警保留在结构化结果中。
指定 PostgreSQL 19 beta 时,如果模板包含预期的软件仓库列表,Pig 还会在 pgsql 后启用
beta 仓库。conf/build/ 下的模式有意绕过 IP 映射与控制节点管理员预检,以保持构建模板可移植。
生效口令标识符包括 grafana_admin_password、pg_admin_password、
pg_monitor_password、pg_replication_password、patroni_password、
haproxy_admin_password、minio_secret_key 与 etcd_root_password。随机生成还覆盖文档中的
DBUser.Meta、DBUser.Viewer、S3User.Backup、S3User.Meta、S3User.Data、
DBUser.Supa 和 Vibe.Coding 占位符;同一标识符出现多次时会使用同一个生成值。
选项:
-c|--conf:模板模式,等价于位置参数[mode],两种形式不能同时使用--ip:最多十个互不相同、逗号分隔的 IPv4 地址--domain:将精确的i.pigsty占位符替换为合法 DNS 域名-v|--version:PostgreSQL 主版本(18/17/16/15/14;19 beta 可显式指定)-r|--region:上游仓库区域(default/china/europe)-m|--mirror:等价于--region china;不能与--region同时使用-O|--output-file:输出配置文件路径(默认:pigsty.yml)-s|--skip:保留占位 IP 并跳过管理员 SSH/sudo 预检;不能与--ip同时使用-p|--port:SSH 端口-x|--proxy:将非空代理环境变量写入all.vars.proxy_env-n|--non-interactive:IP 候选不唯一时拒绝猜测,不进入交互选择-g|--generate:将已知演示口令替换为 24 位随机值
预检与校验
未使用 --skip 时,Pig 会检查内核、架构、软件包管理器、平台厂商、控制节点资源、sudo/管理员
权限、本机 SSH 与 Ansible 可用性;SSH 检查使用 --port 指定的端口。在 Inventory 仍可安全
生成时,这些诊断以可操作告警返回;无效参数与不安全的配置变换仍然是错误。
渲染候选必须通过 Pig 原生 Inventory 校验;如果存在 ansible-inventory,还会在提交文件前执行
一次有时间边界的外部解析。--skip 会保留占位 IP,并跳过管理员 SSH/sudo 预检,但不会禁用
模板解析、安全变更、Inventory 校验或原子写入。
结构化输出
使用全局 -o json 或 -o yaml 时,结果类型为 pig.sty.configure/v1,会报告模式、源模板与
输出路径、区域、所选主地址、已应用与被丢弃的 IP、域名、SSH 端口、请求与实际 PostgreSQL
版本、原生工作流标记、生成的机密标识符及告警。随机口令值绝不会输出。
详见:https://pigsty.cc/docs/setup/install/#配置
sty deploy
使用 deploy.yml 剧本部署 Pigsty。
此命令从您的 Pigsty 安装目录执行 deploy.yml 剧本。为保持向后兼容性,如果 deploy.yml 不存在但 install.yml 存在,将使用 install.yml 代替。
警告:此操作会修改您的系统,且 调用即执行——deploy 不设
--yes确认门, 误触发时请用 Ctrl+C 中断。(v1.6.0 起pig sty install/ins别名已移除。)
sty list
列出可用的 Pigsty 版本。
sty get
下载 Pigsty 源码压缩包。
sty grafana
自 v1.6.0 起,pig sty grafana(别名 gf)通过 Grafana 原生 HTTP API 管理仪表盘,
取代了实验性的 pig sty dashboard。PATH 参数可以指向 grafana 根目录、单个文件夹或单个仪表盘
JSON 文件;缺省时解析 <PIGSTY_HOME>/files/grafana,不会回退到当前目录。
连接与凭据:
| 参数 | 说明 |
|---|---|
--endpoint | Grafana 地址与路径前缀(默认 http://i.pigsty/ui) |
--username | Grafana API 用户名 |
--password | Grafana API 密码(不安全:对进程列表与 shell 历史可见) |
--password-file | 仅属主可读的密码文件(推荐) |
密码解析顺序:--password → --password-file → GRAFANA_PASSWORD 环境变量 →
Inventory 中的 all.vars.grafana_admin_password。
HTTP 客户端带有超时与响应大小限制,并拒绝重定向;TLS 证书默认校验。
传统仪表盘与 schema v2 资源
load 与 init 同时接受传统 Grafana 仪表盘 JSON,以及具有以下精确身份的资源格式:
加载时,PIG 不会把两种格式悄悄压平为同一种:
- 传统 JSON 从顶层
uid取得身份,并调用旧版 dashboard API。 - Schema v2 从
metadata.name取得 UID;缺少 namespace 时默认使用default,spec必须是对象,并通过 Grafana dashboard resource API 写入。 - JSON 文件名去掉
.json后必须与解析出的 UID 一致。本地目录只允许一层文件夹,其目录名会成为 Grafana folder UID。 - 对 schema v2,PIG 保留
spec与grafana.app/message注解,根据本地文件夹写入grafana.app/folder,并在 upsert 前主动去掉由服务端管理的 metadata/status。 dump只有在目标文件已经以 v2 形式存在时才保持 schema v2;此时会使用该文件的 namespace 拉取原生 v2 资源。全新导出目标默认写成传统 JSON;仅存在于本地的文件不会被dump删除。
其他 dashboard.grafana.app/* 版本或结构不完整的资源封装会被直接拒绝,不会被静默当成传统仪表盘。因此,要往返保持 v2 格式,必须保留已有的本地 v2 文件作为格式契约。
10 - pig inventory
pig inventory 命令组(别名 pig inv)自 v1.6.0 起提供,用于以 无损 方式检视、编辑、
校验与体检 Pigsty 配置清单(pigsty.yml),并可通过实验性的 cmdb 子命令与 PostgreSQL CMDB 交换配置。
无损引擎会逐字节保留 YAML 的注释、格式、键序、锚点与换行风格;edit 在写盘前重新解析整个文档并原子写入,
非法 YAML 不可能落盘。
| 命令 | 别名 | 说明 |
|---|---|---|
inv status | 检视当前生效的清单来源(不执行清单) | |
inv list | ls | 列出清单拓扑与取值类型(--depth 限制深度) |
inv show | 原样显示清单 YAML(可能包含敏感信息) | |
inv edit | e | 在 $EDITOR 中编辑清单或选中片段 |
inv validate | v | 校验一份完整的静态 Pigsty 清单 |
inv check | ck | 检查清单、控制器与目标节点就绪状态 |
inv diff | 对比两份清单的声明差异(不输出取值) | |
inv cmdb | 与 PostgreSQL CMDB 交换配置(实验性) |
清单路径默认取自 pig 的配置解析(-i/--inventory 全局参数或 Pigsty 安装目录),
所有命令支持 -o json|yaml 结构化输出。
快速入门
选择器
list / show / edit 接受可选的 选择器 参数,定位清单中的一个片段:
inv edit
在 $EDITOR 中打开选中片段,保存退出后 pig 会:重新应用缩进与换行 → 重新解析整个文档
(失败则中止并保留临时文件)→ 检查磁盘上的文件在编辑期间是否被并发修改 → 原子写入。
| 参数 | 说明 |
|---|---|
--from | 从常规文件或 stdin(-)替换选中片段,跳过编辑器 |
注意:编辑成功后,pig 会把清单文件权限收紧为
0600(清单可能包含数据库密码等敏感信息), 结果中的mode_tightened字段会予以提示。如有其他用户或工具直接读取该文件,请相应调整权限或属主。
inv validate
校验一份完整的静态 Pigsty 清单:YAML 结构、Ansible 约定与 Pigsty 语义(如 admin_ip、infra
分组、主机 IPv4 键等)逐层检查,诊断信息不回显敏感取值。
| 参数 | 说明 |
|---|---|
--strict | 把校验警告当作失败 |
--ansible | 额外使用带边界的 ansible-inventory 适配器交叉解析 |
--timeout | --ansible 兼容性校验超时(默认 10s) |
validate是 Pigsty 语义校验器,不是通用 Ansible linter;其规则与 Pigsty 自带的bin/validate保持对齐(个别地方更严格)。此外,清单解析对 重复键 与 多文档 YAML 直接拒绝——此类文件连show/edit都无法使用。
inv check
在静态校验之上做就绪体检:默认只检查清单与控制器本地条件,可用 --profile 追加探测。
| 参数 | 简写 | 说明 |
|---|---|---|
--profile | -p | 追加探测:ansible / network / ssh |
--user | 显式 SSH 用户(默认控制器当前用户) | |
--port | TCP/SSH 目标端口(默认 22) | |
--sudo | 在 ssh 探测中额外验证 sudo -n true |
inv cmdb(实验性)
实验性功能:接口与行为可能变化。
pig inventory cmdb 通过原生 PostgreSQL 驱动,与 Pigsty 既有的 CMDB 模式
(files/cmdb.sql,pigsty / pglog schema)交换配置清单。连接解析顺序:
-d/--database(库名、URI 或 libpq conninfo)→ METADB_URL 环境变量 → service=meta。
| 子命令 | 说明 |
|---|---|
check | 只读:验证 CMDB 投影,并可选校验与静态清单的一致性 |
init | 应用 cmdb.sql 基线(存在既有 schema 时需 --yes 确认;支持 --plan 预览) |
load | 用静态清单 替换全部 CMDB 声明行(单事务;需 --yes;支持 --plan/--strict) |
dump | 将 CMDB 导出为静态清单文件(目标不同时需 --force 覆盖) |
enable | 守卫式切换 ansible.cfg 的 inventory 指向 CMDB(inventory.sh) |
disable | 切回静态 pigsty.yml(与 enable 均支持 --plan,原子写入可回滚) |
注意:
init会直接应用cmdb.sql基线,不会 先备份既有 CMDB——对已有数据的 CMDB 执行前请自行备份;load会替换全部声明行。破坏性操作均有基于目标指纹的确认门, 结构化输出模式下必须显式--yes。
11 - pig postgres
pig pg 命令(别名 pig postgres)用于管理本地 PostgreSQL 服务器和数据库。它封装了 pg_ctl、psql、vacuumdb 等本地原语;集群级 Patroni 操作请使用 pig pt,编排式 PITR 请使用 pig pitr。
命令概览
服务控制(pg_ctl 封装):
| 命令 | 别名 | 描述 | 备注 |
|---|---|---|---|
pg init | initdb, i | 初始化数据目录 | 封装 initdb |
pg start | boot, up | 启动 PostgreSQL | 封装 pg_ctl start |
pg stop | halt, down | 停止 PostgreSQL | 封装 pg_ctl stop |
pg restart | reboot | 重启 PostgreSQL | 封装 pg_ctl restart |
pg reload | hup | 重载配置 | 封装 pg_ctl reload |
pg status | st, stat | 查看服务状态 | 显示进程与相关服务状态 |
pg promote | pro | 提升备库为主库 | 封装 pg_ctl promote |
pg role | r | 检测实例角色 | 输出 primary/replica |
连接与查询:
| 命令 | 别名 | 描述 | 备注 |
|---|---|---|---|
pg psql | sql, connect | 连接到数据库 | 封装 psql |
pg ps | activity, act | 显示当前连接 | 查询 pg_stat_activity |
pg kill | k | 终止连接 | 默认 dry-run 模式 |
pg clone | 克隆单个数据库 | CREATE DATABASE ... TEMPLATE ... FILE_COPY |
数据库维护:
| 命令 | 别名 | 描述 | 备注 |
|---|---|---|---|
pg vacuum | vac, vc | 清理表 | 封装 vacuumdb |
pg analyze | ana, az | 分析表 | 封装 vacuumdb –analyze-only |
pg freeze | 冻结清理表 | 封装 vacuumdb –freeze | |
pg repack | rp | 在线重整表 | 需要 pg_repack 扩展 |
参数调优:
| 命令 | 别名 | 描述 | 备注 |
|---|---|---|---|
pg tune | tuning | 生成 PostgreSQL 调优参数 | 自动探测硬件,支持结构化输出 |
实例 Fork:
| 命令 | 别名 | 描述 | 备注 |
|---|---|---|---|
pg fork | fork init 的便捷写法 | 默认创建托管 fork,不自动启动 | |
pg fork init | create | 创建本地一次性物理副本 | 默认 /pg/data-<name> |
pg fork list | 列出托管 fork | 扫描 /pg/data-* | |
pg fork start | 启动已有 fork | 支持托管名或 --dst-data 非托管目录 | |
pg fork stop | 停止已有 fork | 支持 shutdown mode | |
pg fork rm | remove, delete | 删除 fork | 运行中的 fork 需 --stop |
日志工具:
| 命令 | 别名 | 描述 | 备注 |
|---|---|---|---|
pg log | l | 日志管理 | 父命令 |
pg log list | ls | 列出日志文件 | |
pg log tail | t, f | 实时查看日志 | tail -f |
pg log show | cat, c | 输出日志内容 | |
pg log less | vi, v | 用 less 查看 | |
pg log grep | g, search | 搜索日志 |
服务子命令(pg svc,也可写作 pg service 或 pg s):
| 命令 | 别名 | 描述 |
|---|---|---|
pg svc start | boot, up | 启动 postgres 服务 |
pg svc stop | halt, dn, down | 停止 postgres 服务 |
pg svc restart | reboot, rt | 重启 postgres 服务 |
pg svc reload | rl, hup | 重载 postgres 服务 |
pg svc status | st, stat | 显示服务状态 |
快速入门
全局参数
以下参数适用于所有 pig pg 子命令:
| 参数 | 简写 | 默认值 | 说明 |
|---|---|---|---|
--version | -v | 自动检测 | PostgreSQL 主版本号(形如 18,17) |
--data | -D | /pg/data | 数据目录路径 |
--dbsu | -U | postgres | 数据库超级用户(或 $PIG_DBSU 环境变量) |
版本检测逻辑:
- 如果指定了
-v,使用指定 PG 大版本 - 否则从数据目录的
PG_VERSION文件读取版本 - 如果都无法获取,使用 PATH 中的默认 PostgreSQL 大版本
服务控制命令
pg init
初始化 PostgreSQL 数据目录,封装 initdb 命令。
- 校验和默认打开,除非使用
-K|--no-data-checksums显式关闭 - 优先使用平台无关的 C.UTF-8 内置 Locale (PG 17 及以上版本),如果不支持则优先使用系统的 C.UTF-8 / C Locale,都不满足时使用系统默认 Locale。
- 如果数据目录已存在,命令会拒绝执行,除非使用
-f|--force强制覆盖。如果数据目录上有 PostgreSQL 正在运行,即使使用-f|--force,命令也会拒绝执行,以防止数据丢失 - 您可以使用
--追加额外参数给initdb,例如--waldir=/wal指定 WAL 日志目录。但如果要覆盖 Locale / Encoding 等参数,建议直接使用initdb命令。
选项:
| 参数 | 简写 | 默认值 | 说明 |
|---|---|---|---|
--no-data-checksums | -K | false | 禁用数据校验和 |
--force | -f | false | 强制初始化,删除已有数据(危险!) |
--yes | -y | false | 与 --force 配合时跳过覆盖确认提示 |
pg start
使用 pg_ctl start 命令启动 PostgreSQL 服务器。
如果 PostgreSQL 由 Patroni 管理,建议使用 pig pt start 通过启动 patroni 的方式来启动。
如果 PostgreSQL 由 Systemd 管理,可以使用 pig pg svc start 来启动服务。
选项:
| 参数 | 简写 | 说明 |
|---|---|---|
--log | -l | 重定向 stdout/stderr 到日志文件 |
--timeout | -t | 等待超时(秒) |
--no-wait | 不等待启动完成 | |
--options | -O | 传递给 postgres 的选项 |
如果 PostgreSQL 已经运行,命令会提示,并打印现有 Postmaster 进程 PID,不会报错。
pg stop
使用 pg_ctl stop 命令停止 PostgreSQL 服务器。
请注意如果 PostgreSQL 由 Patroni 管理,直接使用 pg_ctl stop 停止数据库可能会导致 Patroni 认为数据库异常退出,自动重启或触发自动故障转移。
建议在 Patroni 管理的环境中使用 pig pt stop 或 pig pt svc stop 来停止 patroni ,从而停止 PostgreSQL。
选项:
| 参数 | 简写 | 默认值 | 说明 |
|---|---|---|---|
--mode | -m | fast | 关闭模式:smart/fast/immediate |
--timeout | -t | 60 | 等待超时(秒) |
--no-wait | false | 不等待关闭完成 | |
--plan | false | 只预览本地 pg_ctl stop 计划,不执行 |
关闭模式说明:
| 模式 | 说明 |
|---|---|
smart | 等待所有客户端断开后关闭 |
fast | 回滚活动事务,断开客户端,正常关闭 |
immediate | 立即终止所有进程,下次启动需要恢复 |
pg restart
使用 pg_ctl restart 重启 PostgreSQL 服务器。
选项: 与 pg stop 相同,另外支持 --options(-O)传递给 postgres。
pg reload
使用 pg_ctl reload 重载 PostgreSQL 配置。向服务器发送 SIGHUP 信号。
pg status
显示 PostgreSQL 服务器状态。此命令不仅显示 pg_ctl status 的结果,还会显示 postgres 相关进程和 Pigsty 相关服务的状态。
输出内容:
pg_ctl status输出(进程是否运行、PID 等)- PostgreSQL 进程列表(
ps -u postgres) - 相关服务状态:
postgres:PostgreSQL systemd 服务patroni:Patroni HA 管理服务pgbouncer:连接池服务pgbackrest:备份服务vip-manager:VIP 管理服务haproxy:负载均衡服务
pg promote
使用 pg_ctl promote 命令将备库提升为主库。
选项:
| 参数 | 简写 | 说明 |
|---|---|---|
--timeout | -t | 等待超时(秒) |
--no-wait | 不等待提升完成 | |
--plan | 仅预览提升计划 | |
--yes | -y | 跳过确认提示 |
pg role
检测 PostgreSQL 实例的角色(主库或备库)。
选项:
| 参数 | 简写 | 说明 |
|---|---|---|
--verbose | -V | 显示详细检测过程 |
输出说明:
primary:当前实例为主库replica:当前实例为备库unknown:无法确定实例角色
检测策略(按优先级):
- 进程检测:检查
walreceiver、recovery等进程 - SQL 查询:执行
pg_is_in_recovery()查询(需要 PostgreSQL 运行) - 数据目录检查:检查
standby.signal、recovery.signal、recovery.conf文件
连接与查询命令
pg psql
通过 psql 连接到 PostgreSQL 数据库。
选项:
| 参数 | 简写 | 说明 |
|---|---|---|
--command | -c | 执行单条 SQL 命令 |
--file | -f | 执行 SQL 脚本文件 |
如果指定全局 -D/--data,pg psql 会以数据库超级用户读取该数据目录下的 postmaster.pid,并使用其中记录的端口和 Unix socket 目录连接该实例。
若无法读取或解析 postmaster 信息,命令会直接失败,而不是静默连接到默认实例。
pg ps
显示 PostgreSQL 当前连接。查询 pg_stat_activity 视图。
选项:
| 参数 | 简写 | 说明 |
|---|---|---|
--all | -a | 显示所有连接(包括系统进程) |
--user | -u | 按用户筛选 |
--database | -d | 按数据库筛选 |
pg kill
终止 PostgreSQL 连接。默认为 dry-run 模式,需要 -x 参数才会实际执行。
选项:
| 参数 | 简写 | 说明 |
|---|---|---|
--execute | -x | 实际执行(默认为 dry-run) |
--pid | 终止指定 PID | |
--user | -u | 按用户筛选 |
--database | -d | 按数据库筛选 |
--state | -s | 按状态筛选(idle/active/idle in transaction) |
--query | -q | 按查询模式筛选 |
--all | -a | 包括复制连接 |
--cancel | -c | 取消查询而非终止连接 |
--watch | 每 N 秒重复执行 | |
--plan | 预览执行计划,不终止连接 |
安全说明: --state 和 --query 参数会进行标识符验证,只接受简单的字母数字模式,以防止 SQL 注入。
pg clone
克隆数据库集群中的一个数据库,对于 PG 18 及以上版本优先使用 CoW 原地瞬间克隆
在当前 PostgreSQL 实例内克隆一个数据库。该命令封装 CREATE DATABASE ... TEMPLATE ... STRATEGY FILE_COPY,并会在克隆前终止源数据库上的现有会话,语义与 Pigsty 的 pgsql-db clone 工作流一致。
选项:
| 参数 | 简写 | 说明 |
|---|---|---|
--port | PostgreSQL 端口(默认 5432 或 $PG_PORT) | |
--conn-db | 执行 CREATE DATABASE 的连接库,克隆 postgres 时默认 template1 | |
--owner | 克隆后尝试修改新库 owner | |
--conn-limit | 新库连接数限制(-1 无限制,0 禁止连接) | |
--plan | 仅显示执行计划 | |
--yes | -y | 跳过确认提示 |
说明: PostgreSQL 18+ 且 file_copy_method=clone 可用时,数据库克隆可使用 CoW 语义;否则会退化为普通文件复制。该命令克隆的是单个数据库逻辑对象,不会创建新的 PostgreSQL 实例。
数据库维护命令
pg vacuum
清理数据库表。封装 vacuumdb 命令。
选项:
| 参数 | 简写 | 说明 |
|---|---|---|
--all | -a | 处理所有数据库 |
--schema | 指定 schema | |
--table | -t | 指定表名 |
--verbose | -V | 详细输出 |
--full | -F | VACUUM FULL(需要排他锁) |
安全说明: --schema 和 --table 参数会进行标识符验证,只接受有效的 PostgreSQL 标识符格式。
pg analyze
分析数据库表以更新统计信息。
选项:
| 参数 | 简写 | 说明 |
|---|---|---|
--all | -a | 处理所有数据库 |
--schema | 指定 schema | |
--table | -t | 指定表名 |
--verbose | -V | 详细输出 |
pg freeze
对数据库表执行冻结清理(vacuum freeze),防止事务 ID 回卷。
选项: 与 pg vacuum 相同(不含 --full)。
pg repack
在线重整数据库表。需要安装 pg_repack 扩展。
选项:
| 参数 | 简写 | 说明 |
|---|---|---|
--all | -a | 处理所有数据库 |
--schema | 指定 schema | |
--table | -t | 指定表名 |
--verbose | -V | 详细输出 |
--jobs | -j | 并行任务数(默认 1) |
--plan | 显示将被重整的表 |
参数调优命令
pg tune
根据当前 PostgreSQL 主版本、主机硬件资源和工作负载画像,生成一组推荐的 PostgreSQL 参数。默认自动探测 CPU、内存与数据盘容量,并以文本形式输出配置项。
选项:
| 参数 | 简写 | 默认值 | 说明 |
|---|---|---|---|
--profile | -p | oltp | 调优画像:oltp / olap / tiny / crit |
--cpu | -c | 0 | CPU 核数,0 表示自动探测 |
--mem | -m | 0 | 内存大小(MB),0 表示自动探测 |
--disk | -d | 0 | 数据盘容量(GB),0 表示自动探测 |
--max-conn | -C | 0 | 覆盖 max_connections,0 表示使用画像默认值 |
--shmem-ratio | -R | 0.25 | shared_buffers 占内存比例,取值范围 0.1 ~ 0.4 |
画像说明:
| 画像 | 适用场景 | 特点 |
|---|---|---|
oltp | 通用在线事务处理 | 平衡连接数、缓存与并行度 |
olap | 分析型负载 | 更激进地使用并行与工作内存 |
tiny | 小规格实例 | 控制内存占用与并行度 |
crit | 延迟敏感场景 | 限制并行 gather,偏向稳态响应 |
说明:
- 生成结果会随当前 PostgreSQL 主版本自动裁剪,例如
io_workers仅会在 PG 18+ 输出。 - 文本输出可直接重定向到配置片段,结构化输出适合自动化脚本消费。
- 该命令当前生成建议参数,不会直接修改数据库配置文件。
实例 Fork
pg fork
创建一个本地一次性 PostgreSQL 物理副本,适合临时分析、排障、恢复验证和开发测试。托管 fork 默认写入 /pg/data-<name>,不会注册到 Pigsty、systemd 或 Patroni;显式指定 --dst-data 时会创建非托管 fork,不会被 fork list 枚举。
创建选项:
| 参数 | 简写 | 默认值 | 说明 |
|---|---|---|---|
--dst-data | /pg/data-<name> | 非托管目标数据目录 | |
--dst-port | 自动探测 | 目标端口,从 15432 起寻找空闲端口 | |
--src-data | /pg/data 或 $PG_DATA | 源数据目录;也可用全局 pg -D/--data 设置 | |
--src-port | 5432 或 $PG_PORT | 源端口 | |
--start | -s | false | 创建后启动 fork |
--force | -f | false | 覆盖已有且已停止的目标目录,并跳过确认 |
--timeout | -t | 60 | 启动等待超时(秒) |
--yes | -y | false | 跳过确认提示 |
--plan | false | 只显示执行计划,不执行 |
管理子命令:
| 命令 | 常用参数 | 说明 |
|---|---|---|
pig pg fork list | --plan, -o json/yaml | 列出托管 fork |
pig pg fork start <name> or --dst-data <dir> | --dst-data, --dst-port, -t/--timeout, --plan | 启动已有 fork |
pig pg fork stop <name> or --dst-data <dir> | --dst-data, -m/--mode, -t/--timeout, --plan | 停止已有 fork |
pig pg fork rm <name> or --dst-data <dir> | --dst-data, --stop, -m/--mode, -t/--timeout, -f/--force, -y/--yes, --plan | 删除 fork;运行中的 fork 需 --stop |
行为说明:
- 源实例运行时,命令会使用 PostgreSQL 低级备份 API 创建一致的物理副本;源实例停止时,可执行冷复制。
- 命令会优先使用 CoW/reflink;如果只能普通复制,会在交互模式中提示空间风险并等待确认。
- 为避免误删源数据,目标目录不能是
/、/pg、源 PGDATA、自身父目录或子目录;软链接会先解析到真实路径再判断。 - 复制完成后会清理 fork 中的运行态与复制状态,并写入
fork.json。只有指定-s|--start时才会启动新实例。 - 托管 fork 必须通过名称管理;非托管 fork 需要通过
--dst-data指定目录来启动、停止或删除。
列出 fork:
pig pg fork list 扫描 /pg/data-* 并读取 fork.json。文本状态只区分 forked 与 orphan,不实时判断实例是否正在运行。
结构化输出:
日志命令
日志命令用于查看 PostgreSQL 日志文件。默认日志目录为 /pg/log/postgres,可通过 --log-dir 参数指定其他目录。默认 pg log 动作显示最新 CSV 日志快照;使用 pg log -f 或 pg log tail 实时跟踪。只有 pg log 与 pg log show 支持 -o json 将 CSV 日志行转换为 JSONL;日志快照不支持 yaml 与 json-pretty,follow/tail、less、grep 不支持结构化输出。
日志命令全局参数:
| 参数 | 说明 |
|---|---|
--log-dir | 日志目录路径(默认:/pg/log/postgres) |
--lines / -n | 显示行数(默认 50) |
--follow / -f | 跟踪最新日志(仅 pg log 父命令) |
权限处理: 如果当前用户没有权限读取日志目录,命令会自动使用 sudo 重试。
pg log
显示最新日志快照;配合 -f 时跟踪最新日志。
pg log list
列出日志目录中的日志文件。
pg log tail
实时查看日志文件(类似 tail -f)。默认查看最新的 CSV 日志文件。
选项:
| 参数 | 简写 | 默认值 | 说明 |
|---|---|---|---|
--lines | -n | 50 | 显示的行数 |
--follow | -f | false | 兼容性 no-op;tail 本身总是跟踪 |
pg log show
输出日志文件内容。
选项:
| 参数 | 简写 | 默认值 | 说明 |
|---|---|---|---|
--lines | -n | 50 | 显示的行数 |
pg log less
用 less 打开日志文件。默认定位到文件末尾(+G)。
pg log grep
搜索日志文件内容。
选项:
| 参数 | 简写 | 说明 |
|---|---|---|
--ignore-case | 忽略大小写 | |
--context | -C | 显示上下文行数 |
pg svc 子命令
pg svc(也可写作 pg service 或 pg s)提供通过 systemctl 管理 PostgreSQL 服务的功能:
别名对照:
| 命令 | 别名 |
|---|---|
pg svc start | boot, up |
pg svc stop | halt, dn, down |
pg svc restart | reboot, rt |
pg svc reload | rl, hup |
pg svc status | st, stat |
设计说明
与原生工具的关系:
pig pg 并非对 PostgreSQL 原生工具的简单封装,而是针对常用操作的上层抽象:
- 服务控制命令(init/start/stop/restart/reload/promote)调用
pg_ctl status命令除了pg_ctl status外,还显示进程和相关服务状态- 连接管理命令(psql/ps/kill)调用
psql - clone 命令调用 SQL 创建数据库副本
- 维护命令(vacuum/analyze)调用
vacuumdb - repack 命令调用
pg_repack - fork 命令使用 PostgreSQL 低级备份 API 与本地文件复制创建一次性物理副本
- 日志命令调用
tail、less、grep等系统工具 pg svc命令调用systemctl
如需使用原生工具的完整功能,可直接调用相应命令。
权限处理:
- 如果当前用户已是 DBSU:直接执行命令
- 如果当前用户是 root:使用
su - postgres -c "..."执行 - 其他用户:使用
sudo -inu postgres -- ...执行
安全性考虑:
--state、--query、--schema、--table等参数都经过标识符验证,防止 SQL 注入pg kill默认为 dry-run 模式,避免误操作pg clone会终止源数据库现有会话,建议在维护窗口使用pg fork会拒绝危险目标路径;普通复制 fallback 会提示空间风险- 日志命令在权限不足时自动使用 sudo
平台支持:
此命令专为 Linux 系统设计,部分功能依赖 systemctl。
12 - pig patroni
pig patroni 命令(别名 pig pt)自 v1.6.0 起是已安装 patronictl 的 透明启动器:
pig 只负责选择配置文件与少量本地辅助命令,其余一切命令与参数 原样转发 给 patronictl,
使用原生的参数、交互确认、输出与退出码——patronictl 的新功能无需等待 pig 发版即可使用。
第一个非选项命令词决定分发方式:
set、start/up、stop/dn、service/svc、status/st、log/l走 pig 的本地实现;- 其余任何命令词(
list、restart、reload、reinit、switchover、failover、pause、resume、show-config、edit-config、query、history、topology、dsn、version等) 连同其后的全部参数,逐字转发给patronictl; pig pt -- <命令> ...可以绕过本地命令名冲突(例如pig pt -- set会把set交给 patronictl);pig pt不带命令时打印 pig 帮助,不会运行 patronictl; 原生子命令帮助用pig pt <命令> --help,patronictl 根帮助用pig pt -- --help。
命令概览
透传命令(patronictl 原生):
| 示例 | 说明 |
|---|---|
pig pt list [CLUSTER] | 列出集群成员(原生输出,--format json 可用) |
pig pt restart CLUSTER [MEMBER] | 重启集群 / 成员的 PostgreSQL(原生确认) |
pig pt reload CLUSTER | 重载 PostgreSQL 配置 |
pig pt reinit CLUSTER MEMBER | 重新初始化成员(从主库重新同步数据) |
pig pt switchover CLUSTER [--candidate X] | 计划内主从切换 |
pig pt failover CLUSTER --candidate MEMBER | 手动故障切换(位置参数是集群名) |
pig pt pause / resume CLUSTER | 暂停 / 恢复自动故障切换(维护模式) |
pig pt show-config / edit-config | 查看 / 编辑集群动态配置 |
pig pt query -c 'select 1' | 原生查询(此处 -c 是 query 自己的 SQL 参数) |
转发命令的位置参数遵循 patronictl 原生的 集群优先(CLUSTER-first)语义,
确认提示、输出格式与退出码(含 Click 用法错误退出码 2)均由 patronictl 负责。
本地命令(pig 实现):
| 命令 | 别名 | 说明 |
|---|---|---|
pt set | 修改 PostgreSQL 参数或 Patroni 标量配置(语法糖) | |
pt status | st | 综合状态:systemd 服务 + Patroni 进程 + 集群成员 |
pt service | svc | 管理本地 patroni systemd 服务 |
pt start | up | 隐藏快捷入口,等价于 pt svc start |
pt stop | dn | 隐藏快捷入口,等价于 pt svc stop |
pt log | l | 查看本地 Patroni 日志(show / tail / grep) |
注意:顶层 pt restart 不是 重启 patroni 守护进程的快捷方式,它会转发给
patronictl restart 用于重启 PostgreSQL;重启守护进程请使用 pt svc restart。
快速入门
Pig/PT 选项
以下包装层选项 必须出现在原生命令之前;一旦出现原生命令词,其后的所有参数都属于 patronictl:
| 参数 | 简写 | 说明 |
|---|---|---|
--config-file | -c | 显式指定 Patroni/patronictl 配置文件 |
--dbsu | 执行 patronictl 的 OS 用户(默认 $PIG_DBSU 或 postgres) | |
--dcs-url | -d | 覆盖 Patroni DCS URL(--dcs 为其别名) |
--insecure | -k | 允许 TLS 连接不校验证书 |
v1.6.0 起
--dbsu不再提供-U简写(pg/pb命令不受影响)。
配置文件解析
每次配置相关的 patronictl 调用都会由 pig 注入唯一的根 -c <路径>,解析优先级:
- 命令前显式给出的
-c/--config-file; - 非空的
PATRONICTL_CONFIG_FILE环境变量; /etc/patroni/patroni.yml(存在且以 DBSU 身份可读);/infra/conf/patronictl.yml(存在且以 DBSU 身份可读);- 兜底回退
/etc/patroni/patroni.yml,让 patronictl 的报错指向常规位置。
显式路径与环境变量路径具有权威性:文件缺失或不可读时 pig 不会静默换用其他候选;
相对路径会在切换 OS 用户前转换为绝对路径。常规候选文件的可读性按 实际执行用户(DBSU) 探测,
而非简单检查权限位。解析是惰性的:pt svc start 这类纯 systemd 操作不会触发配置解析;
原生 -h/--help 走免配置快速路径,在未配置 Patroni 的机器上也能查看帮助。
透传执行与输出模式
转发执行直接继承 stdin / stdout / stderr 与终端:原生交互确认、edit-config 的编辑器、
--watch 流式刷新、退出码全部保真;pig 不做输出捕获、不重复渲染错误、不重试、
也不在执行前后读取集群或 DCS 状态。逻辑调用形态为:
结构化输出:转发路径只支持 pig 的 text 模式。在原生命令之前出现的
-o json / -o yaml 会被 明确拒绝(提示改用原生输出选项);
出现在原生命令之后的参数原样转发,由 patronictl 自行校验:
本地命令(set / status / log / service)保留 pig 的结构化输出行为。
pt set
pt set 是唯一的本地配置语法糖,作用于选中配置对应的集群:
键分类规则:
- 以下 Patroni 顶层标量键翻译为原生
--set:loop_wait、ttl、retry_timeout、primary_race_backoff、maximum_lag_on_failover、maximum_lag_on_syncnode、max_timelines_history、primary_start_timeout、primary_stop_timeout、synchronous_mode、synchronous_mode_strict、synchronous_node_count、failsafe_mode、check_timeline、member_slots_ttl(pause不在其列——请使用原生pause/resume); - 其余键一律视为 PostgreSQL 参数,翻译为原生
--pg(含timescaledb.telemetry_level这类带点自定义 GUC); - 以
postgresql.、standby_cluster.、slots.、ignore_slots.开头的结构性键会被 拒绝, 并提示改用原生pig pt edit-config --set。
所有键值对按输入顺序合并为 一次 原生 edit-config 调用,产生一次 diff、一次确认、一次 DCS 更新:
--yes/-y追加原生--force跳过确认;默认由 patronictl 显示 diff 并负责确认;--plan不执行任何修改,仅渲染选中配置与翻译后的原生命令(计划可能包含敏感值);- 结构化输出模式下执行必须携带
--yes(禁止隐藏交互提示); - 值按 YAML 解析:
KEY=null与KEY=均表示删除该键,pig 原样传递; - 修改需要重启的 PostgreSQL 参数后,pig 会提示后续操作:
先
pig pt list,再pig pt restart CLUSTER --pending(需显式集群名)。
服务管理
pt service(别名 pt svc)管理本地 patroni systemd 服务:
| 命令 | 别名 | 说明 |
|---|---|---|
pt service start | pt svc up | 启动 Patroni 服务 |
pt service stop | pt svc dn | 停止 Patroni 服务 |
pt service restart | pt svc rs | 重启 Patroni 服务 |
pt service reload | pt svc rl | 重载 Patroni 服务 |
pt service status | pt svc st | 显示服务状态 |
顶层 pt start / pt stop(别名 up / dn)是隐藏快捷入口,调用同一本地实现。
停止 Patroni 服务可能导致该节点上的 PostgreSQL 一并停止(取决于 Patroni 配置)。
pt status
显示综合状态:systemd 服务状态、Patroni 进程信息、以及来自 patronictl 的集群成员状态。
pt log
查看本地 Patroni 日志。日志目录取自选中配置的 log.dir,未配置时回退到 /pg/log/patroni,
也可用 --log-dir 显式指定。仅 pt log 与 pt log show 支持 -o json(JSONL 快照);
follow / tail / grep 是终端流式操作,不支持结构化输出。
| 子命令 | 别名 | 说明 |
|---|---|---|
show | cat, c, s | 输出最近 Patroni 日志 |
tail | t, f, follow | 持续跟踪 Patroni 日志 |
grep | g, search | 搜索 Patroni 日志 |
| 参数 | 简写 | 默认值 | 说明 |
|---|---|---|---|
--follow | -f | false | 实时跟踪日志输出 |
--lines | -n | 50 | 显示的日志行数 |
--log-dir | 自动解析 | 日志目录 |
从 v1.5.x 迁移
v1.6.0 的透传重写是 破坏性变更,升级前请检查自动化脚本:
| v1.5.x 用法 | v1.6.0 用法 |
|---|---|
pig pt failover <候选成员> | ⚠ pig pt failover CLUSTER --candidate MEMBER(位置参数语义反转:现在是 集群名) |
pig pt restart [成员](自动定位集群) | pig pt restart CLUSTER [MEMBER](需显式集群名) |
pig pt list -o json | pig pt list --format json(原生 JSON,schema 不同) |
pig pt config show | pig pt show-config |
pig pt config edit | pig pt edit-config |
pig pt config set K=V / pg K=V | pig pt set K=V |
pig pt restart -y(pig 确认门) | 原生确认由 patronictl 负责;pt set -y 仍有效 |
pig pt list -W / -w 5 | 原生 pig pt list --watch(patronictl 语义) |
别名 ls/rs/rl/ri/so/fo/p/r/c | 已移除,使用完整原生命令名 |
--dbsu -U | --dbsu(-U 简写已移除) |
此外:转发命令的退出码为 patronictl 原生值(用法错误为 2);
switchover / failover 不再有 pig 侧的 pause 预检——维护模式语义完全由 Patroni 负责。
设计说明
单一权威:集群控制路径只有一条——已安装的 patronictl + 一份选中配置,
经由 Patroni REST API / DCS 生效。pig 不内嵌 DCS 客户端或 REST 控制引擎,
不维护 patronictl 命令清单,不对转发命令做确认、预检、重试或结果改写。
权限处理(与 v1.5.x 相同):
- 当前用户已是 DBSU:直接执行;
- 当前用户是 root:
su - postgres -c "..."执行; - 其他用户:
sudo -inu postgres -- ...执行。
平台支持:此命令专为 Linux 设计,服务管理依赖 systemctl,日志功能依赖可读取的 Patroni 日志文件。
13 - pig pgbackrest
pig pgbackrest 命令(别名 pig pb)用于管理 pgBackRest 备份,并提供低层 restore 原语。
它封装了常用的 pgbackrest 操作,提供简化的备份管理体验。所有命令均以数据库超级用户身份(默认 postgres)执行。
托管集群的编排式时间点恢复请优先使用 pig pitr。
命令概览
信息查询:
| 命令 | 缩写 | 描述 | 实现方式 |
|---|---|---|---|
pb info | i | 显示备份仓库信息 | pgbackrest info |
pb list | ls | 列出备份集,仓库,Stanza | pgbackrest info |
备份与恢复:
| 命令 | 缩写 | 描述 | 实现方式 |
|---|---|---|---|
pb backup | b | 创建备份 | pgbackrest backup |
pb restore | r | 低层备份恢复原语 | pgbackrest restore |
pb expire | e | 清理过期备份 | pgbackrest expire |
Stanza 管理:
| 命令 | 缩写 | 描述 | 实现方式 |
|---|---|---|---|
pb create | c | 创建 stanza(首次设置) | pgbackrest stanza-create |
pb upgrade | u | 升级 stanza(PG 大版本升级后) | pgbackrest stanza-upgrade |
pb delete | d | 删除 stanza(危险操作!) | pgbackrest stanza-delete |
控制命令:
| 命令 | 别名 | 描述 | 实现方式 |
|---|---|---|---|
pb check | ck | 验证备份仓库完整性 | pgbackrest check |
pb start | up | 启用 pgBackRest 操作 | pgbackrest start |
pb stop | dw | 禁用 pgBackRest 操作 | pgbackrest stop |
pb log | l | 查看日志 | 最新日志快照 / tail |
快速入门
全局参数
以下参数适用于所有 pig pb 子命令:
| 参数 | 简写 | 说明 |
|---|---|---|
--stanza | -s | pgBackRest stanza 名称(自动检测) |
--config | -c | 配置文件路径 |
--repo | -r | 仓库编号(多仓库场景) |
--dbsu | -U | 数据库超级用户(默认:$PIG_DBSU 或 postgres) |
Stanza 自动检测:
如果未指定 -s 参数,pig 会从配置文件中自动检测 stanza 名称:
- 读取配置文件(默认
/etc/pgbackrest/pgbackrest.conf) - 查找非
[global*]开头的 section - 使用找到的第一个 stanza
如果配置文件中有多个 stanza,会发出警告并使用第一个。此时应显式指定 --stanza 参数。
多仓库支持:
pgBackRest 支持配置多个仓库(repo1、repo2 等)。使用 -r 参数指定操作的目标仓库:
信息查询命令
pb info
显示备份仓库详细信息,包括所有备份集和 WAL 归档状态。
选项:
| 参数 | 简写 | 说明 |
|---|---|---|
--raw | -R | 原始输出模式(透传 pgBackRest 输出) |
--raw-output | 原始输出格式:text、json(仅 --raw 模式) | |
--set | 显示特定备份集详情 |
pb ls
列出备份仓库中的资源。
类型说明:
| 类型 | 描述 | 数据来源 |
|---|---|---|
| backup | 列出所有备份集(默认) | pgbackrest info |
| repo | 列出配置的仓库 | 解析 pgbackrest.conf |
| stanza | 列出所有 stanza | 解析 pgbackrest.conf |
备份命令
pb backup
创建物理备份。备份只能在主库实例上执行。
选项:
| 参数 | 简写 | 说明 |
|---|---|---|
--force | -f | 跳过主库角色检查 |
备份类型:
| 类型 | 说明 |
|---|---|
| (空) | 自动模式:无备份则全量,否则增量 |
| full | 全量备份:备份所有数据 |
| diff | 差异备份:自上次全量备份以来的变更 |
| incr | 增量备份:自上次任意备份以来的变更 |
主库检查:
执行备份前,命令会自动检查当前实例是否为主库。如果是备库,命令会报错退出。使用 --force 可跳过此检查。
pb expire
按保留策略清理过期的备份和 WAL 归档。
选项:
| 参数 | 简写 | 说明 |
|---|---|---|
--set | 删除特定备份集 | |
--plan | 仅预览清理计划,不删除备份 | |
--yes | -y | 与 --set 配合时跳过确认提示 |
保留策略配置:
保留策略在 pgbackrest.conf 中配置:
恢复命令
pb restore
从备份恢复,支持时间点恢复目标。
必须显式指定一个恢复目标(-d/-I/-t/--name/--lsn/--xid);不带参数仅显示帮助信息。
恢复目标选项:
| 参数 | 简写 | 说明 |
|---|---|---|
--default | -d | 恢复到 WAL 流末尾(最新数据) |
--immediate | -I | 恢复到备份一致性点 |
--time | -t | 恢复到指定时间戳 |
--name | 恢复到命名还原点 | |
--lsn | 恢复到指定 LSN | |
--xid | 恢复到指定事务 ID |
备份集和其他选项:
| 参数 | 简写 | 说明 |
|---|---|---|
--set | -b | 从特定备份集恢复(可与目标组合) |
--data | -D | 目标数据目录 |
--exclusive | -X | 排他模式:在目标前停止 |
--target-action | 到达恢复目标后的动作:pause/promote/shutdown | |
--target-timeline | -T | 恢复时间线:latest/current/N/0xN |
--plan | 仅预览恢复计划,不执行 | |
--yes | -y | 跳过交互式 y/yes 确认 |
-- 后的原生参数 | 透传 pgBackRest restore 参数,例如 -- --delta |
组合规则: --target-action 不能与 --default 同时使用,因为 --default 已表示恢复到 WAL 末尾。--exclusive/-X 必须配合明确的停止目标使用:--time、--lsn 或 --xid。
-- 后的原生 pgBackRest restore 参数不能覆盖 Pig 已管理的恢复目标、生命周期、数据目录、仓库、配置和选择参数;请使用 Pig 的一等参数设置这些语义。表空间/链接迁移类参数(如 --tablespace-map、--link-map、--link-all)仍可透传。
时间格式:
支持多种时间格式输入,自动补全时区(支持非整小时时区如 +05:30):
| 格式 | 示例 | 说明 |
|---|---|---|
| 完整格式 | 2025-01-01 12:00:00+08 | 包含时区的完整时间戳 |
| 仅日期 | 2025-01-01 | 自动补全为当天 00:00:00(当前时区) |
| 仅时间 | 12:00:00 | 自动补全为今天(当前时区) |
恢复流程:
- 验证参数和环境
- 检查 PostgreSQL 已停止
- 显示恢复计划,等待交互式
y/yes确认 - 执行 pgbackrest restore
- 提供恢复后的操作指引
重要提示: 恢复前必须先停止 PostgreSQL;如果该 PGDATA 由 Patroni 管理,应使用 pig pitr 编排 Patroni、PostgreSQL 与 pgBackRest:
Stanza 管理命令
pb create
初始化新的 stanza。必须在首次备份前执行。
选项:
| 参数 | 简写 | 说明 |
|---|---|---|
--no-online | PostgreSQL 未运行时创建 | |
--force | -f | 强制创建 |
pb upgrade
PostgreSQL 大版本升级后更新 stanza。
选项:
| 参数 | 说明 |
|---|---|
--no-online | PostgreSQL 未运行时升级 |
使用场景:
当 PostgreSQL 进行大版本升级(如 16 → 17)后,需要执行此命令更新 stanza 元数据。
pb delete
删除 stanza 及其所有备份。
选项:
| 参数 | 简写 | 说明 |
|---|---|---|
--plan | 仅预览删除计划,不执行 | |
--yes | -y | 跳过交互式 y/yes 确认 |
警告: 这是一个 破坏性且不可逆 的操作!所有备份将被永久删除。
命令包含多重安全机制:
- 文本模式下要求交互式
y/yes确认,除非指定--yes - 结构化输出模式必须显式指定
--yes - 配置文件存在多个 stanza 且未显式
--stanza时,拒绝自动选择删除目标
控制命令
pb check
验证备份仓库的完整性和配置。
此命令检查:
- WAL 归档配置是否正确
- 仓库是否可访问
- stanza 配置是否有效
pb start
启用 pgBackRest 操作。
在执行 pb stop 后使用此命令恢复正常操作。
pb stop
禁用 pgBackRest 操作(用于维护)。
选项:
| 参数 | 简写 | 说明 |
|---|---|---|
--force | -f | 终止正在运行的操作 |
使用场景:
在进行系统维护时,使用此命令阻止新的备份操作启动。
日志命令
pb log
查看 pgBackRest 日志文件。日志目录优先读取 pgBackRest 配置中的 log-path,未配置时使用 /pg/log/pgbackrest/。父命令默认显示最新日志快照,实时跟踪请使用 tail 或 -f。只有 pb log 与 pb log show 支持 -o json 输出 JSONL;日志快照不支持 yaml 与 json-pretty,follow/tail 不支持结构化输出。
子命令:
| 子命令 | 别名 | 说明 |
|---|---|---|
| list | ls | 列出日志文件 |
| show | cat, c | 显示最新日志内容 |
| tail | t, f, follow | 实时跟踪最新日志 |
选项:
| 参数 | 简写 | 默认值 | 说明 |
|---|---|---|---|
--lines | -n | 50 | 显示的行数 |
--follow | -f | false | 父命令 pb log 使用该参数进入跟踪;pb log tail 中为 no-op,因为 tail 总是跟踪 |
权限处理:
如果当前用户没有权限读取日志目录,命令会自动使用 sudo 重试。
设计说明
命令执行方式:
所有 pig pb 命令都以数据库超级用户(DBSU)身份执行。这是因为 pgBackRest 需要访问 PostgreSQL 数据文件和 WAL 归档。
执行逻辑:
- 如果当前用户已是 DBSU:直接执行命令
- 如果当前用户是 root:使用
su - postgres -c "..."执行 - 其他用户:使用
sudo -inu postgres -- ...执行
与 pgbackrest 的关系:
pig pb 并非 pgbackrest 的完整封装,而是针对常用操作的上层抽象:
- 自动检测 stanza 名称,无需每次指定
- 备份前自动检查主库角色
- 恢复时显示计划并要求交互式
y/yes确认 - 提供人性化的时间格式输入
- 恢复后提供操作指引
如需使用 pgbackrest 的完整功能,请直接使用 pgbackrest 命令。
默认配置路径:
| 配置项 | 默认值 |
|---|---|
| 配置文件 | /etc/pgbackrest/pgbackrest.conf |
| 日志目录 | /pg/log/pgbackrest |
| 数据目录 | 配置文件中的 pg1-path,或 $PGDATA 环境变量,或 /pg/data |
安全考虑:
pb delete在没有--yes时要求交互式y/yes确认,多 stanza 配置下必须显式指定--stanzapb restore需要显式恢复目标,校验--time,并在没有--yes时要求交互式y/yes确认pb backup默认检查主库角色,防止在备库执行pb log tail不支持结构化输出;需要 JSONL 快照时使用pb log show -n N -o json
平台支持:
此命令专为 Linux 系统设计,依赖 Pigsty 的默认目录结构。
14 - pig pitr
pig pitr 命令用于通过 pgBackRest 执行时间点恢复,并以保守方式处理本地 PostgreSQL 与 Patroni 生命周期。与底层的 pig pb restore 不同,pig pitr 会先做恢复前检查,必要时停止 Patroni 与 PostgreSQL,执行 restore,然后按参数决定是否启动 PostgreSQL。
请注意:对于托管的默认数据目录,pig pitr 恢复后会让 Patroni 保持停止。请先验证恢复结果,再由人工恢复 Patroni 管理;该命令不会自动重入 Patroni 集群、执行故障切换,或验证集群成员状态。
命令概览
pig pitr 的默认目标是恢复 Pigsty 管理的主数据目录。典型流程如下:
- 验证恢复目标参数,必须指定
-d/-I/-t/--name/--lsn/--xid之一 - 解析 pgBackRest 配置与目标数据目录
- 对默认数据目录恢复时,若 Patroni 正在运行,则停止 Patroni
- 确保 PostgreSQL 已停止
- 调用
pgbackrest restore - 除非指定
--no-restart,否则启动 PostgreSQL - 输出恢复后验证与 Patroni 恢复指引
与 pig pb restore 的区别:
| 特性 | pig pitr | pig pb restore |
|---|---|---|
| 停止 Patroni | 默认数据目录恢复时自动停止 | 手动处理 |
| 停止 PostgreSQL | 自动检查并停止 | 必须预先停止 |
| 启动 PostgreSQL | 默认自动启动,可用 --no-restart 禁用 | 手动处理 |
| Patroni 恢复 | 不自动恢复,验证后人工处理 | 不处理 |
| 适用场景 | 生产恢复编排 | 底层 restore 或脚本集成 |
快速入门
参数说明
恢复目标(必选其一)
| 参数 | 简写 | 说明 |
|---|---|---|
--default | -d | 恢复到 WAL 流末尾(最新数据) |
--immediate | -I | 恢复到备份一致性点 |
--time | -t | 恢复到指定时间戳 |
--name | 恢复到命名还原点 | |
--lsn | 恢复到指定 LSN | |
--xid | 恢复到指定事务 ID |
备份与目标选项
| 参数 | 简写 | 说明 |
|---|---|---|
--set | -b | 从特定备份集开始恢复 |
--target-action | 到达恢复目标后的动作:pause/promote/shutdown | |
--target-timeline | -T | 恢复时间线:latest/current/N/0xN |
--exclusive | -X | 排他模式:在目标前停止 |
--target-action=shutdown 必须配合 --no-restart,因为 PostgreSQL 到达目标后会退出。--target-action 不能与 --default 同时使用,因为 --default 已表示恢复到 WAL 末尾。--exclusive/-X 必须配合明确的停止目标使用:--time、--lsn 或 --xid。
-- 后的原生 pgBackRest restore 参数不能覆盖 Pig 已管理的恢复目标、生命周期、数据目录、仓库、配置和选择参数;这些语义应使用 Pig 的一等参数设置。该限制与 pig pb restore 的 passthrough blocklist 一致。
流程控制
| 参数 | 简写 | 说明 |
|---|---|---|
--no-restart | restore 后不启动 PostgreSQL | |
--plan | 仅显示执行计划,不执行 | |
--yes | -y | 跳过交互式 y/yes 确认 |
--timeout | PostgreSQL 启动/恢复等待超时,默认 120 秒 | |
--force-stop | fast stop 失败时允许 immediate shutdown 与 kill fallback |
配置参数
| 参数 | 简写 | 说明 |
|---|---|---|
--stanza | -s | pgBackRest stanza 名称 |
--config | -c | pgBackRest 配置文件路径 |
--repo | -r | 仓库编号 |
--dbsu | -U | 数据库超级用户(默认:postgres) |
--data | -D | 目标数据目录 |
时间格式
--time 参数支持多种时间格式,会按当前时区补全缺失部分:
| 格式 | 示例 | 说明 |
|---|---|---|
| 完整格式 | 2025-01-01 12:00:00+08 | 包含时区的完整时间戳 |
| 无时区日期时间 | 2025-01-01 12:00:00 | 自动补当前本地时区,T 分隔符也可接受 |
| 仅日期 | 2025-01-01 | 自动补全为当天 00:00:00 |
| 仅时间 | 12:00:00 | 自动补全为今天的该时间 |
计划输出与可重放的 next-action 命令会把仅日期、仅时间目标规范化为带时区的确定性时间戳;该规则与 pig pb restore --plan 一致。
托管目录与 Side Restore
托管 PostgreSQL 数据目录来自有效 pgBackRest 配置中的 pg1-path 与命令参数,而不是硬编码 /pg/data。例如托管 PGDATA 是 /var/lib/pgsql/18/data 时,仍然按托管恢复处理。路径比较会在需要时以数据库超级用户解析软链接,因此指向托管 PGDATA 的软链接不会被误判为 side restore。
显式 -D/--data 且解析后不同于托管目录时,才是 side restore。side restore 必须使用 --no-restart,不会停止 Patroni,也不会管理默认 PostgreSQL 服务;恢复后请手工使用类似 pg_ctl -D <dir> -o "-p 5433" start、pg_ctl -D <dir> status 和 pgbackrest --pg1-path=<dir> stanza-create 的命令处理。side restore 目录必须已存在且归属 DBSU;与托管 PGDATA 不同,它不要求预先包含 PG_VERSION 初始化标记。Pig 不会自动创建该目录,因为命令需要在 destructive restore 前完成路径归类、owner 检查和安全提示。
对于非 /pg/data 的托管 PGDATA,恢复后的 runbook 命令会显式带上有效数据目录,例如:
pig pg psql -D <dir> 会读取该目录的 postmaster.pid,使用其中记录的端口和 socket 目录连接恢复后的实例;无法解析 postmaster 信息时不会静默回退到默认连接目标。
执行流程
第一阶段:预检查
- 验证恢复目标参数,缺失目标时只显示帮助并返回错误
- 解析有效 pgBackRest 配置、stanza、仓库与托管
pg1-path - 检查托管数据目录存在且已初始化
- 对 side restore,检查自定义目录存在且归属 DBSU
- 验证所选 stanza 正常且存在备份;指定
--set时验证对应备份集存在 - 检测 Patroni 服务状态与 PostgreSQL 运行状态
第二阶段:处理 Patroni
托管数据目录恢复时,如果 Patroni 正在运行,命令会停止 Patroni,让目标 PGDATA 在 restore 期间保持离线。恢复完成后 Patroni 会保持停止。自定义 -D side restore 不触碰托管数据目录,因此不会停止 Patroni。
第三阶段:确保 PostgreSQL 停止
命令会先等待 Patroni 停止后 PostgreSQL 自动退出,再重试 pg_ctl stop -m fast。如果 PostgreSQL 仍无法停止,默认不会使用更激进手段;只有显式指定 --force-stop,才允许 immediate shutdown 与最终的 kill fallback。
第四阶段:执行恢复
调用 pgBackRest 执行 restore,并把恢复目标、备份集、时间线、target action 等参数映射到 pgbackrest restore。原生 pgBackRest 参数可以写在 -- 之后:
第五阶段:启动或保持停止
除非指定 --no-restart,命令会在 restore 后启动 PostgreSQL,并等待恢复完成。对于 --default 与 --target-action=promote,命令会等待恢复实例上的 pg_is_in_recovery() 变为 false;恢复与后续 SQL 探测会绑定恢复数据目录 postmaster.pid 中的端口,并在存在时使用其中的 socket 目录。以下情况必须或通常应使用 --no-restart:
- 自定义
-Dside restore,因为恢复出的配置仍保留原端口,需要手动指定空闲端口启动 --target-action=shutdown,因为 PostgreSQL 到达恢复目标后会退出- 需要人工检查恢复目录后再决定是否启动
使用示例
场景一:误删数据恢复
场景二:恢复到最新状态
场景三:恢复到备份一致性点
场景四:恢复后保持停止
场景五:自定义目录 side restore
执行计划示例
执行 pig pitr -d --plan 会显示类似以下的计划:
恢复后操作
成功恢复后,请先验证数据,再决定如何恢复服务编排:
托管数据目录恢复后,Patroni 保持停止是刻意设计:避免恢复出的旧状态在未经确认前重新进入 HA 编排。
安全机制
恢复目标必填: 不指定 -d/-I/-t/--name/--lsn/--xid 时,命令只显示帮助,不执行 restore。
确认机制: 文本模式下,破坏性恢复会在执行前要求交互式 y/yes 确认;自动化脚本可使用 -y|--yes。结构化输出模式不会交互提示,必须使用 --yes 执行或 --plan 预览。
Patroni 边界: 托管数据目录恢复时,命令会在需要时停止 Patroni,防止 Patroni 在 restore 期间重新拉起 PostgreSQL。恢复后不会自动重入 Patroni。
Side restore 边界: 自定义 -D side restore 必须使用 --no-restart,因为恢复出来的 PostgreSQL 配置仍使用原端口;side restore 不管理 Patroni 或默认 PostgreSQL 服务。
失败边界: 如果 restore 在 Patroni 已停止后失败,Patroni 会保持停止,目标数据目录可能已经部分恢复。修复底层问题后应重新执行 PITR,或先验证恢复状态;不要在未确认前启动 Patroni。如果 restore 已执行但 PostgreSQL 启动失败,同样应先检查 PostgreSQL/pgBackRest 日志并验证数据目录,再决定是否恢复 Patroni 管理。
结构化输出: 结构化执行需要 --yes;--plan 是预览路径。成功执行后的结构化 PITR 结果会把恢复后操作放在 Result envelope 的 next_actions,而不是 data 内部。data 包含 requested_data_dir、effective_data_dir、managed_data_dir 与 side_restore,便于自动化区分用户输入和实际恢复目标。
设计说明
pig pitr调用 pgBackRest restore,并在本地处理 Patroni/PostgreSQL 停止与可选启动。pig pitr不是集群恢复总控,不负责 Patroni failover、rejoin、VIP 或应用流量切换。- 需要底层 restore 语义或脚本细粒度控制时,使用
pig pb restore。 - 需要手工切换 Patroni 集群时,使用
pig pt switchover CLUSTER或pig pt failover CLUSTER --candidate MEMBER(v1.6.0 起为 patronictl 原生透传,集群名必填)。
权限执行:
- 如果当前用户已是 DBSU:直接执行命令
- 如果当前用户是 root:使用
su - postgres -c执行 - 其他用户:使用
sudo -inu postgres --执行
平台支持:
此命令专为 Linux 系统设计,依赖 pgBackRest、systemd(托管服务场景)以及 DBSU 可访问的数据目录与日志路径。