pig 是一个开源的 PostgreSQL(与扩展)包管理器,在 主流Linux (amd64
/ arm64
) 发行版上可用。
pig
可以屏蔽 PG 安装的复杂度,利用OS原生包管理器一键安装 PostgreSQL 13-17 以及 405 个 PG生态扩展插件。
curl -fsSL https://repo.pigsty.io/pig | bash
安装完成后即可使用。假设你想安装 pg_duckdb
扩展:
$ pig repo add pigsty pgdg -u # 添加 pgdg 和 pigsty 仓库,然后更新仓库缓存
$ pig ext install pg17 # 使用原生 PGDG 包安装 PostgreSQL 17 内核
$ pig ext install pg_duckdb # 为当前的 pg17 安装 pg_duckdb 扩展
默认的 pig repo add pigsty pgdg
会将 PGDG
仓库和 PIGSTY
仓库添加到你的系统中。
而以下命令会备份并清除你现有的仓库,然后添加所有需要的仓库到你的系统:
pig repo add all --ru # 这将用 node、pgdg、pigsty 仓库覆盖所有现有仓库
还有一个更激进的仓库添加版本:repo set
,它默认会覆盖你现有的仓库(-r
)。
你可以在 /etc/apt/backup
或 /etc/yum.repos.d/backup
找到你的旧仓库备份。
你可以用以下命令安装 PostgreSQL 内核包:
pig ext install pg17 # 安装 PostgreSQL 17 内核(除开发包外的所有包)
pig ext install pg16-simple # 安装 PostgreSQL 16 内核的最小包集
pig ext install pg15 -y # 安装 PostgreSQL 15 内核并自动确认
pig ext install pg14=14.3 # 安装特定小版本的 PostgreSQL 14 内核
pig ext install pg13=13.10 # 安装 PostgreSQL 13 内核
你可以将已安装的 PostgreSQL 链接到系统路径:
pig ext link pg17 # 创建 /usr/pgsql 软链接,并写入 /etc/profile.d/pgsql.sh
. /etc/profile.d/pgsql.sh # 重新加载路径并立即生效
你也可以使用其他包别名,它们会转换为你的操作系统发行版上对应的包名
其中的 $v
会被替换为当前活动或指定的 pg 版本号,如 17
、16
等:
pg17: "postgresql$v postgresql$v-server postgresql$v-libs postgresql$v-contrib postgresql$v-plperl postgresql$v-plpython3 postgresql$v-pltcl postgresql$v-llvmjit",
pg16-core: "postgresql$v postgresql$v-server postgresql$v-libs postgresql$v-contrib postgresql$v-plperl postgresql$v-plpython3 postgresql$v-pltcl postgresql$v-test postgresql$v-devel postgresql$v-llvmjit",
pg15-simple: "postgresql$v postgresql$v-server postgresql$v-libs postgresql$v-contrib postgresql$v-plperl postgresql$v-plpython3 postgresql$v-pltcl",
pg14-client: "postgresql$v",
pg13-server: "postgresql$v-server postgresql$v-libs postgresql$v-contrib",
pg17-devel: "postgresql$v-devel",
pgsql: "postgresql$v postgresql$v-server postgresql$v-libs postgresql$v-contrib postgresql$v-plperl postgresql$v-plpython3 postgresql$v-pltcl postgresql$v-llvmjit",
pgsql-core: "postgresql$v postgresql$v-server postgresql$v-libs postgresql$v-contrib postgresql$v-plperl postgresql$v-plpython3 postgresql$v-pltcl postgresql$v-test postgresql$v-devel postgresql$v-llvmjit",
pgsql-simple: "postgresql$v postgresql$v-server postgresql$v-libs postgresql$v-contrib postgresql$v-plperl postgresql$v-plpython3 postgresql$v-pltcl",
pgsql-client: "postgresql$v",
pgsql-server: "postgresql$v-server postgresql$v-libs postgresql$v-contrib",
pgsql-devel: "postgresql$v-devel",
pgsql-basic: "pg_repack_$v* wal2json_$v* pgvector_$v*",
postgresql: "postgresql$v*",
pgsql-common: "patroni patroni-etcd pgbouncer pgbackrest pg_exporter pgbadger vip-manager",
patroni: "patroni patroni-etcd",
pgbouncer: "pgbouncer",
pgbackrest: "pgbackrest",
pg_exporter: "pg_exporter",
vip-manager: "vip-manager",
pgbadger: "pgbadger",
pg_activity: "pg_activity",
pg_filedump: "pg_filedump",
pgxnclient: "pgxnclient",
pgformatter: "pgformatter",
pgcopydb: "pgcopydb",
pgloader: "pgloader",
pg_timetable: "pg_timetable",
wiltondb: "wiltondb",
polardb: "PolarDB",
ivorysql: "ivorysql3 ivorysql3-server ivorysql3-contrib ivorysql3-libs ivorysql3-plperl ivorysql3-plpython3 ivorysql3-pltcl ivorysql3-test",
ivorysql-all: "ivorysql3 ivorysql3-server ivorysql3-contrib ivorysql3-libs ivorysql3-plperl ivorysql3-plpython3 ivorysql3-pltcl ivorysql3-test ivorysql3-docs ivorysql3-devel ivorysql3-llvmjit",
pig
会使用你当前活动 PATH
中的默认 postgres 安装,
但你可以通过 -v
(当使用 PGDG 约定时)为特定安装版本安装扩展,
或者为自定义安装指定任意 pg_config
路径。
pig ext install pg_duckdb -v 16 # 为 pg16 安装扩展
pig ext install pg_duckdb -p /usr/lib/postgresql/17/bin/pg_config # 指定 pg17 的 pg_config
你也可以安装特定版本的 PostgreSQL 内核包:
pig ext install pgvector=0.7.0 # 安装 pgvector 0.7.0
pig ext install pg16=16.5 # 安装特定小版本的 PostgreSQL 16
注意 APT 仓库可能只提供最新的小版本软件(并且需要完整的版本字符串)
你可以对扩展名、描述和类别进行模糊搜索:
$ pig ext ls olap
INFO[14:48:13] found 13 extensions matching 'olap':
Name State Version Cate Flags License Repo PGVer Package Description
---- ----- ------- ---- ------ ------- ------ ----- ------------ ---------------------
citus avail 13.0.1 OLAP -dsl-- AGPL-3.0 PIGSTY 14-17 citus_17* 作为扩展的分布式 PostgreSQL
citus_columnar avail 11.3-1 OLAP -ds--- AGPL-3.0 PIGSTY 14-17 citus_17* Citus 列式存储引擎
columnar n/a 11.1-11 OLAP -ds--- AGPL-3.0 PIGSTY 13-16 hydra_17* Hydra 列式存储扩展
pg_analytics avail 0.3.4 OLAP -ds-t- PostgreSQL PIGSTY 14-17 pg_analytics_17 基于 DuckDB 的 Postgres 分析功能
pg_duckdb avail 0.2.0 OLAP -dsl-- MIT PIGSTY 14-17 pg_duckdb_17* 嵌入 Postgres 的 DuckDB
pg_mooncake avail 0.1.2 OLAP ------ MIT PIGSTY 14-17 pg_mooncake_17* Postgres 中的列式存储表
duckdb_fdw avail 1.0.0 OLAP -ds--r MIT PIGSTY 13-17 duckdb_fdw_17* DuckDB 外部数据包装器
pg_parquet avail 0.2.0 OLAP -dslt- PostgreSQL PIGSTY 14-17 pg_parquet_17 在 Postgres 和 Parquet 间复制数据
pg_fkpart avail 1.7 OLAP -d---- GPL-2.0 PIGSTY 13-17 pg_fkpart_17 基于外键的表分区工具
pg_partman avail 5.2.4 OLAP -ds--- PostgreSQL PGDG 13-17 pg_partman_17* 按时间或 ID 管理分区表的扩展
plproxy avail 2.11.0 OLAP -ds--- BSD 0-Clause PIGSTY 13-17 plproxy_17* 以过程语言实现的数据库分区
pg_strom avail 5.2.2 OLAP -ds--x PostgreSQL PGDG 13-17 pg_strom_17* PG-Strom - 使用 GPU 和 NVME 加速大数据处理
tablefunc added 1.0 OLAP -ds-tx PostgreSQL CONTRIB 13-17 postgresql17-contrib 操作整个表的函数,包括交叉表
(13 Rows) (状态: added=已添加|avail=可用|n/a=不可用, 标志: b=有二进制文件, d=有DDL, s=有共享库, l=需要加载, t=可信任, r=可重定位, x=未知)
你可以使用 -v 16
或 -p /path/to/pg_config
来查找其他 PostgreSQL 安装的扩展可用性。
你可以使用 pig ext info
子命令获取扩展元数据:
$ pig ext info pg_duckdb
╭────────────────────────────────────────────────────────────────────────────╮
│ pg_duckdb │
├────────────────────────────────────────────────────────────────────────────┤
│ DuckDB Embedded in Postgres │
├────────────────────────────────────────────────────────────────────────────┤
│ Extension : pg_duckdb │
│ Alias : pg_duckdb │
│ Category : OLAP │
│ Version : 0.3.1 │
│ License : MIT │
│ Website : https://github.com/duckdb/pg_duckdb │
│ Details : https://pigsty.io/ext/olap/pg_duckdb │
├────────────────────────────────────────────────────────────────────────────┤
│ Extension Properties │
├────────────────────────────────────────────────────────────────────────────┤
│ PostgreSQL Ver │ Available on: 17, 16, 15, 14 │
│ CREATE : Yes │ CREATE EXTENSION pg_duckdb; │
│ DYLOAD : Yes │ SET shared_preload_libraries = 'pg_duckdb' │
│ TRUST : No │ require database superuser to install │
│ Reloc : No │ Schemas: [] │
│ Depend : No │ │
├────────────────────────────────────────────────────────────────────────────┤
│ RPM Package │
├────────────────────────────────────────────────────────────────────────────┤
│ Repository │ PIGSTY │
│ Package │ pg_duckdb_$v* │
│ Version │ 0.3.1 │
│ Availability │ 17, 16, 15, 14 │
├────────────────────────────────────────────────────────────────────────────┤
│ DEB Package │
├────────────────────────────────────────────────────────────────────────────┤
│ Repository │ PIGSTY │
│ Package │ postgresql-$v-pg-duckdb │
│ Version │ 0.3.1 │
│ Availability │ 17, 16, 15, 14 │
├────────────────────────────────────────────────────────────────────────────┤
│ Known Issues │
├────────────────────────────────────────────────────────────────────────────┤
│ el8 │
├────────────────────────────────────────────────────────────────────────────┤
│ Additional Comments │
├────────────────────────────────────────────────────────────────────────────┤
│ broken on el8 (libstdc++ too low), conflict with duckdb_fdw │
╰────────────────────────────────────────────────────────────────────────────╯
你可以使用 pig repo list
列出所有可用的仓库/模块(仓库集合):
$ pig repo list
os_environment: {code: el8, arch: amd64, type: rpm, major: 8}
repo_upstream: # Available Repo: 32
- { name: pigsty-local ,description: 'Pigsty Local' ,module: local ,releases: [7,8,9] ,arch: [x86_64, aarch64] ,baseurl: 'file:///www/pigsty' }
- { name: pigsty-infra ,description: 'Pigsty INFRA' ,module: infra ,releases: [7,8,9] ,arch: [x86_64, aarch64] ,baseurl: 'https://repo.pigsty.io/yum/infra/$basearch' }
- { name: pigsty-pgsql ,description: 'Pigsty PGSQL' ,module: pgsql ,releases: [7,8,9] ,arch: [x86_64, aarch64] ,baseurl: 'https://repo.pigsty.io/yum/pgsql/el$releasever.$basearch' }
- { name: nginx ,description: 'Nginx Repo' ,module: infra ,releases: [7,8,9] ,arch: [x86_64, aarch64] ,baseurl: 'https://nginx.org/packages/rhel/$releasever/$basearch/' }
- { name: baseos ,description: 'EL 8+ BaseOS' ,module: node ,releases: [8,9] ,arch: [x86_64, aarch64] ,baseurl: 'https://dl.rockylinux.org/pub/rocky/$releasever/BaseOS/$basearch/os/' }
- { name: appstream ,description: 'EL 8+ AppStream' ,module: node ,releases: [8,9] ,arch: [x86_64, aarch64] ,baseurl: 'https://dl.rockylinux.org/pub/rocky/$releasever/AppStream/$basearch/os/' }
- { name: extras ,description: 'EL 8+ Extras' ,module: node ,releases: [8,9] ,arch: [x86_64, aarch64] ,baseurl: 'https://dl.rockylinux.org/pub/rocky/$releasever/extras/$basearch/os/' }
- { name: powertools ,description: 'EL 8 PowerTools' ,module: node ,releases: [8] ,arch: [x86_64, aarch64] ,baseurl: 'https://dl.rockylinux.org/pub/rocky/$releasever/PowerTools/$basearch/os/' }
- { name: epel ,description: 'EL 8+ EPEL' ,module: node ,releases: [8,9] ,arch: [x86_64, aarch64] ,baseurl: 'http://download.fedoraproject.org/pub/epel/$releasever/Everything/$basearch/' }
- { name: pgdg-common ,description: 'PostgreSQL Common' ,module: pgsql ,releases: [7,8,9] ,arch: [x86_64, aarch64] ,baseurl: 'https://download.postgresql.org/pub/repos/yum/common/redhat/rhel-$releasever-$basearch' }
- { name: pgdg-el8fix ,description: 'PostgreSQL EL8FIX' ,module: pgsql ,releases: [8] ,arch: [x86_64, aarch64] ,baseurl: 'https://download.postgresql.org/pub/repos/yum/common/pgdg-centos8-sysupdates/redhat/rhel-8-x86_64/' }
- { name: pgdg13 ,description: 'PostgreSQL 13' ,module: pgsql ,releases: [7,8,9] ,arch: [x86_64, aarch64] ,baseurl: 'https://download.postgresql.org/pub/repos/yum/13/redhat/rhel-$releasever-$basearch' }
- { name: pgdg14 ,description: 'PostgreSQL 14' ,module: pgsql ,releases: [7,8,9] ,arch: [x86_64, aarch64] ,baseurl: 'https://download.postgresql.org/pub/repos/yum/14/redhat/rhel-$releasever-$basearch' }
- { name: pgdg15 ,description: 'PostgreSQL 15' ,module: pgsql ,releases: [7,8,9] ,arch: [x86_64, aarch64] ,baseurl: 'https://download.postgresql.org/pub/repos/yum/15/redhat/rhel-$releasever-$basearch' }
- { name: pgdg16 ,description: 'PostgreSQL 16' ,module: pgsql ,releases: [7,8,9] ,arch: [x86_64, aarch64] ,baseurl: 'https://download.postgresql.org/pub/repos/yum/16/redhat/rhel-$releasever-$basearch' }
- { name: pgdg17 ,description: 'PostgreSQL 17' ,module: pgsql ,releases: [7,8,9] ,arch: [x86_64, aarch64] ,baseurl: 'https://download.postgresql.org/pub/repos/yum/17/redhat/rhel-$releasever-$basearch' }
- { name: pgdg-extras ,description: 'PostgreSQL Extra' ,module: extra ,releases: [7,8,9] ,arch: [x86_64, aarch64] ,baseurl: 'https://download.postgresql.org/pub/repos/yum/common/pgdg-rhel$releasever-extras/redhat/rhel-$releasever-$basearch' }
- { name: pgdg13-nonfree ,description: 'PostgreSQL 13+' ,module: extra ,releases: [7,8,9] ,arch: [x86_64] ,baseurl: 'https://download.postgresql.org/pub/repos/yum/non-free/13/redhat/rhel-$releasever-$basearch' }
- { name: pgdg14-nonfree ,description: 'PostgreSQL 14+' ,module: extra ,releases: [7,8,9] ,arch: [x86_64] ,baseurl: 'https://download.postgresql.org/pub/repos/yum/non-free/14/redhat/rhel-$releasever-$basearch' }
- { name: pgdg15-nonfree ,description: 'PostgreSQL 15+' ,module: extra ,releases: [7,8,9] ,arch: [x86_64] ,baseurl: 'https://download.postgresql.org/pub/repos/yum/non-free/15/redhat/rhel-$releasever-$basearch' }
- { name: pgdg16-nonfree ,description: 'PostgreSQL 16+' ,module: extra ,releases: [7,8,9] ,arch: [x86_64] ,baseurl: 'https://download.postgresql.org/pub/repos/yum/non-free/16/redhat/rhel-$releasever-$basearch' }
- { name: pgdg17-nonfree ,description: 'PostgreSQL 17+' ,module: extra ,releases: [7,8,9] ,arch: [x86_64] ,baseurl: 'https://download.postgresql.org/pub/repos/yum/non-free/17/redhat/rhel-$releasever-$basearch' }
- { name: timescaledb ,description: 'TimescaleDB' ,module: extra ,releases: [7,8,9] ,arch: [x86_64, aarch64] ,baseurl: 'https://packagecloud.io/timescale/timescaledb/el/$releasever/$basearch' }
- { name: wiltondb ,description: 'WiltonDB' ,module: mssql ,releases: [7,8,9] ,arch: [x86_64, aarch64] ,baseurl: 'https://download.copr.fedorainfracloud.org/results/wiltondb/wiltondb/epel-$releasever-$basearch/' }
- { name: ivorysql ,description: 'IvorySQL' ,module: ivory ,releases: [7,8,9] ,arch: [x86_64] ,baseurl: 'https://repo.pigsty.io/yum/ivory/el$releasever.$basearch' }
- { name: groonga ,description: 'Groonga' ,module: groonga ,releases: [8,9] ,arch: [x86_64, aarch64] ,baseurl: 'https://packages.groonga.org/almalinux/$releasever/$basearch/' }
- { name: mysql ,description: 'MySQL' ,module: mysql ,releases: [7,8,9] ,arch: [x86_64, aarch64] ,baseurl: 'https://repo.mysql.com/yum/mysql-8.0-community/el/$releasever/$basearch/' }
- { name: mongo ,description: 'MongoDB' ,module: mongo ,releases: [7,8,9] ,arch: [x86_64, aarch64] ,baseurl: 'https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/8.0/$basearch/' }
- { name: redis ,description: 'Redis' ,module: redis ,releases: [8,9] ,arch: [x86_64, aarch64] ,baseurl: 'https://rpmfind.net/linux/remi/enterprise/$releasever/redis72/$basearch/' }
- { name: grafana ,description: 'Grafana' ,module: grafana ,releases: [7,8,9] ,arch: [x86_64, aarch64] ,baseurl: 'https://rpm.grafana.com' }
- { name: docker-ce ,description: 'Docker CE' ,module: docker ,releases: [7,8,9] ,arch: [x86_64, aarch64] ,baseurl: 'https://download.docker.com/linux/centos/$releasever/$basearch/stable' }
- { name: kubernetes ,description: 'Kubernetes' ,module: kube ,releases: [7,8,9] ,arch: [x86_64, aarch64] ,baseurl: 'https://pkgs.k8s.io/core:/stable:/v1.31/rpm/' }
repo_modules: # Available Modules: 19
- all : pigsty-infra, pigsty-pgsql, pgdg-common, pgdg-el8fix, pgdg-el9fix, pgdg17, pgdg16, pgdg15, pgdg14, pgdg13, baseos, appstream, extras, powertools, crb, epel, base, updates, security, backports
- pigsty : pigsty-infra, pigsty-pgsql
- pgdg : pgdg-common, pgdg-el8fix, pgdg-el9fix, pgdg17, pgdg16, pgdg15, pgdg14, pgdg13
- node : baseos, appstream, extras, powertools, crb, epel, base, updates, security, backports
- infra : pigsty-infra, nginx
- pgsql : pigsty-pgsql, pgdg-common, pgdg-el8fix, pgdg-el9fix, pgdg13, pgdg14, pgdg15, pgdg16, pgdg17, pgdg
- extra : pgdg-extras, pgdg13-nonfree, pgdg14-nonfree, pgdg15-nonfree, pgdg16-nonfree, pgdg17-nonfree, timescaledb, citus
- mssql : wiltondb
- mysql : mysql
- docker : docker-ce
- kube : kubernetes
- grafana : grafana
- pgml : pgml
- groonga : groonga
- haproxy : haproxyd, haproxyu
- ivory : ivorysql
- local : pigsty-local
- mongo : mongo
- redis : redis
有没有想过,安装或升级 PostgreSQL 扩展时,不再需要翻阅过时的 README、晦涩的 configure 脚本,或者随便找的 GitHub 分支和补丁?痛苦的现实是,Postgres 强大的扩展性往往意味着复杂的设置,尤其是在你需要兼顾多个发行版或 CPU 架构时。
这时,Pig 就应运而生了。Pig 是一个基于 Go 的包管理器,旨在一举解决 Postgres 及其超过 400 个扩展的问题。无论是 TimescaleDB、Citus、PGVector,还是 20 多个 Rust 扩展,甚至是自托管 Supabase 所需的所有工具 —— Pig 的统一命令行界面让这些都触手可及。 它去除了混乱的源代码编译和半成品的仓库,提供与 Debian、Ubuntu、RedHat 系列以及 x86 和 ARM 架构完美兼容的、版本对齐的 RPM/DEB 包。无需猜测,也无需麻烦。
Pig 并不是重新发明轮子,而是利用你系统原生的包管理器(APT、YUM、DNF),并遵循官方 PGDG 包装规范,确保无缝对接。这意味着你不必在“正确的方式”和“快速的方式”之间做选择;Pig 尊重你现有的仓库,符合操作系统的最佳实践,并且与其他你已经使用的包完美兼容。
准备好在没有繁琐操作的情况下为你的 Postgres 增加超级能力吗?查看 GitHub 了解文档、安装步骤,并一睹其庞大的扩展列表。然后,看看你的本地 Postgres 实例如何变成一个充满专业模块的强大工具 —— 无需黑魔法。如果 Postgres 的未来是不可阻挡的可扩展性,那么 Pig 就是帮助你解锁这一未来的神灯。说实话,没人抱怨自己拥有太多扩展。
安装 pig
最简单的方法是运行以下脚本:
curl -fsSL https://repo.pigsty.io/pig | bash
该脚本会直接从 pigsty 仓库下载最新版本的 pig
RPM/DEB 包,并通过 rpm
或 dpkg
进行安装。
pig
RPM 包可在 pigsty-infra
YUM 仓库中获得,适用于所有 EL 兼容平台:
sudo tee /etc/yum.repos.d/pigsty.repo > /dev/null <<-'EOF'
[pigsty-infra]
name=Pigsty Infra for $basearch
baseurl=https://repo.pigsty.io/yum/infra/$basearch
enabled = 1
gpgcheck = 0
module_hotfixes=1
EOF
sudo yum makecache;
sudo yum install -y pig
pig
DEB 包可在 pigsty-infra
APT 仓库中获得,适用于所有 Debian/Ubuntu 兼容平台:
sudo tee /etc/apt/sources.list.d/pigsty.list > /dev/null <<EOF
deb [trusted=yes] https://repo.pigsty.io/apt/infra generic main
EOF
sudo apt update;
sudo apt install -y pig
安装完成后,你可以使用以下命令将 pig
更新到最新版本:
pig update # 将 pig 自身升级到最新版本
pig - Linux包管理器(适用于PostgreSQL)和Pigsty的命令行工具
用法:
pig [命令]
示例:
# 开始使用:详情请查看 https://github.com/pgsty/pig
pig repo add -ru # 覆盖现有仓库并更新缓存
pig ext add pg17 # 安装可选的postgresql 17软件包
pig ext add pg_duckdb # 安装特定的postgresql扩展
命令:
pig repo : add rm update list info status create boot cache
pig ext : add rm update list info status import link build
pig sty : init boot conf install get list
PostgreSQL扩展管理器
ext 管理PostgreSQL扩展 (pgext)
repo 管理Linux软件仓库 (apt/dnf)
Pigsty管理命令
sty 管理Pigsty安装
附加命令:
build 构建Postgres扩展
completion 为指定的shell生成自动补全脚本
help 获取任何命令的帮助信息
status 显示环境状态
update 升级pig自身
version 显示pig版本信息
标志:
--debug 启用调试模式
-h, --help 帮助信息
-i, --inventory string 配置清单路径
--log-level string 日志级别:debug, info, warn, error, fatal, panic (默认 "info")
--log-path string 日志文件路径,默认为终端输出
-t, --toggle 切换帮助信息
使用 "pig [command] --help" 获取关于命令的更多信息。
pig status # 显示操作系统、pg和pig状态
pig repo status # 显示上游仓库状态
pig ext status # 显示pg扩展状态
pig ext list [query] # 列出并搜索扩展
pig ext info [ext...] # 获取特定扩展的信息
pig ext status [-v] # 显示已安装的扩展和pg状态
pig ext add [ext...] # 为当前pg版本安装扩展
pig ext rm [ext...] # 为当前pg版本移除扩展
pig ext update [ext...] # 更新扩展至最新版本
pig ext import [ext...] # 下载扩展到本地仓库
pig ext link [ext...] # 将postgres安装链接到路径
pig ext upgrade # 获取最新的扩展目录
pig repo list # 可用仓库列表
pig repo info [repo|module...] # 显示仓库信息
pig repo status # 显示当前仓库状态
pig repo add [repo|module...] # 添加仓库和模块
pig repo rm [repo|module...] # 移除仓库和模块
pig repo update # 更新仓库包缓存
pig repo create # 在当前系统上创建仓库
pig repo boot # 从离线包启动仓库
pig repo cache # 将仓库缓存为离线包
pig 也可以作为 Pigsty 的命令行工具 - 一个电池包含的免费 PostgreSQL RDS。 它带来了 HA, PITR, Monitoring, IaC, 以及所有扩展到你的 PostgreSQL 集群。
pig sty init # 安装 pigsty 到 ~/pigsty
pig sty boot # 安装ansible和其他预依赖
pig sty conf # 自动生成pigsty.yml配置文件
pig sty install # 运行install.yml playbook
你可以使用 pig sty
子命令在当前节点上初始化 pigsty。
pig repo
命令是一个全面的软件包仓库管理工具。
它提供了管理、添加、删除、创建和操作操作系统软件仓库的功能。
它同时支持基于 RPM(EL)和基于 Debian 的系统。
pig repo - 管理 Linux APT/YUM 仓库
pig repo list # 显示可用仓库列表 (info)
pig repo info [repo|module...] # 显示仓库详细信息 (info)
pig repo status # 显示当前仓库状态 (info)
pig repo add [repo|module...] # 添加仓库和模块 (root)
pig repo rm [repo|module...] # 删除仓库和模块 (root)
pig repo update # 更新仓库包缓存 (root)
pig repo create # 在当前系统创建仓库 (root)
pig repo boot # 从离线包启动仓库 (root)
pig repo cache # 将仓库缓存为离线包 (root)
用法:
pig repo [command]
别名:
repo, r
示例:
入门指南:https://pigsty.io/ext/pig/
pig repo add -ru # 添加所有仓库并更新缓存(简单粗暴但有效)
pig repo add pigsty -u # 温和版本,仅添加 pigsty 仓库并更新缓存
pig repo add node pgdg pigsty # 安装 postgres 包所需的基本仓库
pig repo add all # all = node + pgdg + pigsty
pig repo add all extra # extra 模块包含非免费和一些第三方扩展仓库
pig repo update # 更新仓库缓存
pig repo create # 更新本地仓库 /www/pigsty 元数据
pig repo boot # 将 /tmp/pkg.tgz 解压到 /www/pigsty
pig repo cache # 将 /www/pigsty 缓存到 /tmp/pkg.tgz
可用命令:
add 添加新仓库
boot 从离线包引导仓库
cache 从本地仓库创建离线包
create 创建本地 YUM/APT 仓库
info 获取仓库详细信息
list 打印可用仓库列表
rm 移除仓库
set 清除并覆盖仓库
status 显示当前仓库状态
update 更新仓库缓存
标志:
-h, --help 显示帮助信息
全局标志:
--debug 启用调试模式
-i, --inventory string 配置清单路径
--log-level string 日志级别:debug, info, warn, error, fatal, panic(默认 "info")
--log-path string 日志文件路径,默认输出到终端
列出可用仓库并添加 PGDG 和 Pigsty 仓库,然后更新本地仓库缓存。
# 列出可用模块
pig repo list
# 添加 PGDG 和 Pigsty 仓库
pig repo add pgdg pigsty
# yum makecache 或 apt update
pig repo update
添加新仓库后,你需要更新仓库元数据缓存,你可以使用专门的 pig repo update
命令,或在 pig repo add
命令中使用 -u|--update
标志。
pig repo add pigsty -u # 添加 pigsty 仓库并更新仓库缓存
如果你想在添加新仓库前清除所有现有仓库,你可以使用额外的 -r|--remove
标志,或使用专门的 pig repo set
子命令替代 pig repo add
。
pig repo add all --remove # 删除所有现有仓库并添加 node、pgdg、pigsty 仓库并更新仓库缓存
pig repo add -r # 同上,如果缺少仓库/模块将使用默认的 `all` 别名来添加 node、pgdg、pigsty 仓库
pig repo set # 同上,set 是 `add --remove` 的快捷方式,被删除的仓库文件会备份到 `/etc/yum.repos.d/backup` 或 `/etc/apt/sources.list.d/backup`
设置 PostgreSQL 安装所需仓库最简单粗暴但可靠的方式是清除所有现有仓库并添加所有必需的仓库:
pig repo set -u # 清除所有现有仓库并添加所有必需的仓库并更新仓库缓存
在 pigsty 中,所有仓库都被组织成模块,一个模块是仓库的集合。
模块名称可能在不同的操作系统发行版、主要版本、架构和地理区域中映射到不同的实际仓库。
Pigsty 会处理所有细节,你可以使用 pig repo list
列出所有仓库和模块。
repo_modules: # 可用模块:19
- all : pigsty-infra, pigsty-pgsql, pgdg, baseos, appstream, extras, powertools, crb, epel, base, updates, security, backports
- pigsty : pigsty-infra, pigsty-pgsql
- pgdg : pgdg
- node : baseos, appstream, extras, powertools, crb, epel, base, updates, security, backports
- infra : pigsty-infra, nginx
- pgsql : pigsty-pgsql, pgdg-common, pgdg-el8fix, pgdg-el9fix, pgdg13, pgdg14, pgdg15, pgdg16, pgdg17, pgdg
- extra : pgdg-extras, pgdg13-nonfree, pgdg14-nonfree, pgdg15-nonfree, pgdg16-nonfree, pgdg17-nonfree, timescaledb, citus
- mssql : wiltondb
- mysql : mysql
- docker : docker-ce
- kube : kubernetes
- grafana : grafana
- pgml : pgml
- groonga : groonga
- haproxy : haproxyd, haproxyu
- ivory : ivorysql
- local : pigsty-local
- mongo : mongo
- redis : redis
通常安装 PostgreSQL 和所有扩展需要以下 3 个模块:
pgdg
:官方 PostgreSQL 仓库,包含 PG 内核包、工具和 100+ 扩展。pigsty
:Pigsty 扩展仓库,包含 200+ 额外扩展和工具。node
:操作系统默认仓库,提供 PostgreSQL 所需的所有库和依赖。有一个方便的伪模块别名 all
,包含了上述 3 个基本模块。
你可以使用 pig repo add all
添加所有这些模块,或使用更简单的缩写:pig repo add
。
repo list
列出当前系统可用的仓库模块和仓库。
print available repo list
Usage:
pig repo list [flags]
Aliases:
list, l, ls
Examples:
pig repo list # 列出当前系统可用的仓库
pig repo list all # 列出所有未过滤的仓库原始数据
Flags:
-h, --help help for list
可用仓库定义在 cli/repo/assets/repo.yml
中,
如果你想修改仓库列表,可以通过在 ~/.pig/repo.yml
添加自己的 repo.yml
文件来实现。
repo add
向系统添加仓库配置文件。
添加新仓库
用法:
pig repo add [flags]
别名:
add, a, append
示例:
pig repo add # = pig repo add all
pig repo add all # 添加 node,pgsql,infra 仓库(推荐)
pig repo add all -u # 添加上述仓库并更新仓库缓存(或:--update)
pig repo add all -r # 添加所有仓库,删除旧仓库(或:--remove)
pig repo add pigsty --update # 添加 pigsty 扩展仓库并更新仓库缓存
pig repo add pgdg --update # 添加 pgdg 官方仓库并更新仓库缓存
pig repo add pgsql node --remove # 添加操作系统 + postgres 仓库,删除旧仓库
pig repo add infra # 添加可观测性、grafana & prometheus 堆栈、pg 二进制工具
(注意系统仓库管理需要 sudo / root 权限)
可用仓库模块:
- all : pgsql + node + infra(推荐)
- pigsty : PostgreSQL 扩展仓库(默认)
- pgdg : PGDG 官方 PostgreSQL 仓库(官方)
- node : 操作系统官方仓库(el/debian/ubuntu)
- pgsql : pigsty + pgdg(所有可用的 pg 扩展)
# 使用 pig repo list 查看可用仓库和模块
标志:
-h, --help 显示帮助信息
--region string 区域代码(default|china)
-r, --remove 添加新仓库前删除现有仓库
-u, --update 运行 apt update 或 dnf makecache
此命令:
-r|--remove
标志,它会将现有仓库移动到备份文件夹:/etc/yum.repos.d/backup
/etc/apt/sources.list.d/backup
/etc/yum.repos.d/<module>.repo
/etc/apt/sources.list.d/<module>.list
-u|--update
标志,它会运行 apt update
或 dnf makecache
来更新仓库缓存。如果不是以 root
身份运行,需要 sudo 权限。
repo set
与 repo add <...> --remove
相同,在添加新仓库前删除现有仓库。
清除并覆盖仓库
用法:
pig repo set [flags]
别名:
set, overwrite
示例:
pig repo set all # 将仓库设置为 node,pgsql,infra(推荐)
pig repo set all -u # 将仓库设置为上述仓库并更新仓库缓存(或 --update)
pig repo set pigsty --update # 将仓库设置为 pigsty 扩展仓库并更新仓库缓存
pig repo set pgdg --update # 将仓库设置为 pgdg 官方仓库并更新仓库缓存
pig repo set infra # 将仓库设置为可观测性、grafana & prometheus 堆栈、pg 二进制工具
(注意系统仓库管理需要 sudo/root 权限)
标志:
-h, --help 显示帮助信息
--region string 区域代码
-u, --update 运行 apt update 或 dnf makecache
如果不是以 root
身份运行,需要 sudo 权限。
repo update
更新仓库缓存,相当于 apt update
或 yum makecache
。
更新仓库缓存
用法:
pig repo update [flags]
别名:
update, u
示例:
pig repo update # yum makecache 或 apt update
标志:
-h, --help 显示帮助信息
如果不是以 root
身份运行,需要 sudo 权限。
repo rm
从系统中删除仓库文件。
删除仓库
用法:
pig repo rm [flags]
别名:
rm, remove
示例:
pig repo rm # 删除(备份)所有现有仓库到备份目录
pig repo rm all --update # 删除模块 'all' 并更新仓库缓存
pig repo rm node pigsty -u # 删除模块 'node' 和 'pigsty' 并更新仓库缓存
标志:
-h, --help 显示帮助信息
-u, --update 运行 apt update 或 dnf makecache
它会从系统中删除仓库文件,如果提供了 -u|--update
标志,它会在删除仓库文件后运行 apt update
或 dnf makecache
来更新仓库缓存。
在删除文件之前,该命令会创建现有仓库配置的备份。
如果不是以 root
身份运行,通常需要 sudo 权限。
repo status
打印系统仓库目录并列出系统包管理器可用的仓库。
显示当前仓库状态
用法:
pig repo status [flags]
别名:
status, s, st
标志:
-h, --help 显示帮助信息
repo info
提供特定仓库或模块的详细信息。
获取仓库详细信息
用法:
pig repo info [flags]
别名:
info, i
标志:
-h, --help 显示帮助信息
示例:
#-------------------------------------------------
名称 : pgdg
摘要 : PGDG
可用性 : 是(debian d12 amd64)
模块 : pgsql
系统架构 : [x86_64, aarch64]
系统发行版 : deb [11,12,20,22,24]
元数据 : trusted=yes
基础 URL : http://apt.postgresql.org/pub/repos/apt/ ${distro_codename}-pgdg main
china : https://mirrors.tuna.tsinghua.edu.cn/postgresql/repos/apt/ ${distro_codename}-pgdg main
# 默认仓库内容
# pgdg PGDG
deb [trusted=yes] http://apt.postgresql.org/pub/repos/apt/ bookworm-pgdg main
# 中国镜像仓库内容
# pgdg PGDG
deb [trusted=yes] https://mirrors.tuna.tsinghua.edu.cn/postgresql/repos/apt/ bookworm-pgdg main
它会打印给定仓库名称或模块名称的仓库信息。并且支持区域性镜像。
repo create
在指定目录创建本地 YUM/APT 仓库
创建本地 YUM/APT 仓库
用法:
pig repo create [path...]
别名:
create, cr
示例:
pig repo create # 默认在 /www/pigsty 创建仓库
pig repo create /www/mssql /www/b # 在多个位置创建仓库
(注意系统仓库管理需要 sudo/root 权限)
默认目录: /www/pigsty
此命令:
createrepo_c
dpkg-dev
如果不是以 root
身份运行,需要该目录的读/写权限。
repo cache
为离线使用创建仓库内容的压缩 tarball。
pig repo cache [directory_path] [package_path] [repo1,repo2,...]
参数:
directory_path
:包含仓库的源目录(默认:/www
)package_path
:输出 tarball 路径(默认:当前目录下的 pigsty-pkg-<os>-<arch>.tgz
)repos
:要包含的仓库子目录的逗号分隔列表(默认:全部)示例:
pig repo cache /www /tmp/pkg.tgz pigsty
pig repo cache /www /tmp/pkg.tgz pigsty mssql ivory
你可以在已创建的本地仓库上创建 tarball,并使用它从离线包引导新系统。
repo cache
从本地仓库创建离线包
从本地仓库创建离线包
用法:
pig repo cache [flags]
别名:
cache, c
示例:
pig repo cache # 从 /www/pigsty 创建 /tmp/pkg.tgz 离线包
pig repo cache -f # 强制覆盖现有包
pig repo cache -d /srv # 将默认内容目录 /www 覆盖为 /srv
pig repo cache pigsty mssql # 使用 pigsty 和 mssql 仓库创建 tarball
pig repo c -f # 制作离线包的最简用法
(注意系统仓库管理需要 sudo/root 权限)
标志:
-d, --dir string 源仓库路径(默认 "/www/")
-h, --help 显示帮助信息
-p, --path string 离线包路径(默认 "/tmp/pkg.tgz")
repo boot
从离线包引导本地仓库。
从离线包引导仓库
用法:
pig repo boot [flags]
别名:
boot, b, bt
示例:
pig repo boot # 从 /tmp/pkg.tgz 引导仓库到 /www
pig repo boot -p /tmp/pkg.tgz # 从给定的包路径引导仓库
pig repo boot -d /srv # 引导仓库到另一个目录 /srv
标志:
-d, --dir string 目标仓库路径(默认 "/www/")
-h, --help 显示帮助信息
-p, --path string 离线包路径(默认 "/tmp/pkg.tgz")
参数:
offline_package
:由 pig repo cache
创建的 tarball 路径target_directory
:解压仓库的目标目录(默认:/www
)示例:
pig repo boot /tmp/pkg.tgz /www
此命令:
pig ext
命令是一个用于管理 PostgreSQL 扩展的综合工具。
它允许用户搜索、安装、删除、更新和管理 PostgreSQL 扩展插件,甚至包括内核包。
pig ext - 管理 PostgreSQL 扩展
pig repo add -ru # 添加所有仓库并更新缓存(简单粗暴但有效)
pig ext add pg17 # 安装可选的 postgresql 17 包
pig ext list duck # 在目录中搜索扩展
pig ext scan -v 17 # 扫描 pg 17 已安装的扩展
pig ext add pg_duckdb # 安装指定的 postgresql 扩展
用法:
pig ext [命令]
别名:
ext, e, ex, pgext, extension
示例:
pig ext list [query] # 列出并搜索扩展
pig ext info [ext...] # 获取特定扩展的信息
pig ext status [-v] # 显示已安装的扩展和 pg 状态
pig ext add [ext...] # 为当前 pg 版本安装扩展
pig ext rm [ext...] # 为当前 pg 版本移除扩展
pig ext update [ext...] # 将扩展更新到最新版本
pig ext import [ext...] # 下载扩展到本地仓库
pig ext link [ext...] # 将 postgres 安装链接到路径
pig ext upgrade # 升级到最新的扩展目录
可用命令:
add 安装 postgres 扩展
import 导入扩展包到本地仓库
info 获取扩展信息
link 将 postgres 链接到活动 PATH
list 列出并搜索可用扩展
rm 移除 postgres 扩展
scan 扫描活动 pg 的已安装扩展
status 显示活动 pg 上已安装的扩展
update 更新当前 pg 版本的已安装扩展
upgrade 将扩展目录升级到最新版本
标志:
-h, --help 显示帮助信息
-p, --path string 通过 pg_config 路径指定 postgres
-v, --version int 通过主版本号指定 postgres
全局标志:
--debug 启用调试模式
-i, --inventory string 配置清单路径
--log-level string 日志级别:debug, info, warn, error, fatal, panic(默认 "info")
--log-path string 日志文件路径,默认为终端
使用 "pig ext [命令] --help" 获取有关命令的更多信息。
要安装 postgres 扩展,你首先需要设置 repo:
pig repo add pgdg pigsty -u # 温和的方式添加 pgdg 和 pigsty 仓库
pig repo set -u # 暴力方式移除并添加所有必需的仓库
然后你就可以搜索并安装 PostgreSQL 扩展:
pig ext install pg_duckdb
pig ext install pg_partman
pig ext install pg_cron
pig ext install pg_repack
pig ext install pg_stat_statements
pig ext install pg_stat_kcache
查看 扩展列表 获取可用扩展及其名称。
PATH
中的 pg_config
检测活动的 PostgreSQL 安装-v
)或 pg_config 路径(-p
)指定。
如果给定 -v
,pig 将使用给定版本的 PGDG 内核包的默认路径。
/usr/pgsql-$v/bin/pg_config
/usr/lib/postgresql/$v/bin/pg_config
等
如果给定 -p
,pig 将使用 pg_config
路径查找 PostgreSQL 安装。-y
标志,因为它会自动确认所有提示。Pigsty 假设你已经安装了官方的 PGDG 内核包,如果没有,你可以这样安装:
pig ext install pg17 # 安装 PostgreSQL 17 内核(除了 devel 包)
ext list
列出并搜索扩展目录中的可用扩展。
列出并搜索可用扩展
用法:
pig ext list [query] [flags]
别名:
list, l, ls, find
示例:
pig ext list # 列出所有扩展
pig ext list postgis # 通过名称/描述搜索扩展
pig ext ls olap # 列出 olap 类别的扩展
pig ext ls gis -v 16 # 列出 pg 16 的 gis 类别扩展
默认扩展目录定义在 cli/ext/assets/pigsty.csv
你可以使用 pig ext upgrade
更新到最新的扩展目录,它会将最新的扩展目录数据下载到 ~/.pig/pigsty.csv
。
ext info
显示特定扩展的详细信息。
pig ext info [ext...]
示例:
pig ext info postgis # 显示关于 PostGIS 的详细信息
pig ext info timescaledb # 显示关于 TimescaleDB 的信息
$ pig ext info postgis # 显示关于 PostGIS 的详细信息
╭────────────────────────────────────────────────────────────────────────────╮
│ postgis │
├────────────────────────────────────────────────────────────────────────────┤
│ PostGIS 几何和地理空间类型及函数 │
├────────────────────────────────────────────────────────────────────────────┤
│ 扩展名 : postgis │
│ 别名 : postgis │
│ 类别 : GIS │
│ 版本 : 3.5.2 │
│ 许可证 : GPL-2.0 │
│ 网站 : https://git.osgeo.org/gitea/postgis/postgis │
│ 详情 : https://pigsty.io/gis/postgis │
├────────────────────────────────────────────────────────────────────────────┤
│ 扩展属性 │
├────────────────────────────────────────────────────────────────────────────┤
│ PostgreSQL 版本 │ 可用于: 17, 16, 15, 14, 13 │
│ CREATE : 是 │ CREATE EXTENSION postgis; │
│ DYLOAD : 否 │ 无需加载共享库 │
│ TRUST : 否 │ 需要数据库超级用户安装 │
│ Reloc : 否 │ 模式: [] │
│ Depend : 否 │ │
├────────────────────────────────────────────────────────────────────────────┤
│ 被以下扩展依赖 │
├────────────────────────────────────────────────────────────────────────────┤
│ - postgis_topology │
│ - postgis_raster │
│ - postgis_sfcgal │
│ - postgis_tiger_geocoder │
│ - pgrouting │
│ - pointcloud_postgis │
│ - h3_postgis │
│ - mobilitydb │
│ - documentdb │
├────────────────────────────────────────────────────────────────────────────┤
│ RPM 包 │
├────────────────────────────────────────────────────────────────────────────┤
│ 仓库 │ PGDG │
│ 包名 │ postgis35_$v* │
│ 版本 │ 3.5.2 │
│ 可用性 │ 17, 16, 15, 14, 13 │
├────────────────────────────────────────────────────────────────────────────┤
│ DEB 包 │
├────────────────────────────────────────────────────────────────────────────┤
│ 仓库 │ PGDG │
│ 包名 │ postgresql-$v-postgis-3 postgresql-$v-postgis-3-scripts │
│ 版本 │ 3.5.2 │
│ 可用性 │ 17, 16, 15, 14, 13 │
╰────────────────────────────────────────────────────────────────────────────╯
status
- 显示已安装的扩展显示活动 PostgreSQL 实例上已安装扩展的状态。
pig ext status [-c]
选项:
-c, --contrib
: 包括 contrib 扩展示例:
pig ext status # 显示已安装的扩展
pig ext status -c # 显示已安装的扩展,包括 contrib 扩展
pig ext status -v 16 # 显示 PostgreSQL 16 已安装的扩展
ext scan
扫描活动 PostgreSQL 实例以查找已安装的扩展。
pig ext scan [-v version]
它将扫描 postgres 扩展文件夹以查找所有实际安装的扩展。
$ pig ext status
Installed:
* PostgreSQL 17.4 (Debian 17.4-1.pgdg120+2) 85 Extensions
Active:
PG Version : PostgreSQL 17.4 (Debian 17.4-1.pgdg120+2)
Config Path : /usr/lib/postgresql/17/bin/pg_config
Binary Path : /usr/lib/postgresql/17/bin
Library Path : /usr/lib/postgresql/17/lib
Extension Path : /usr/share/postgresql/17/extension
Extension Stat : 18 Installed (PIGSTY 8, PGDG 10) + 67 CONTRIB = 85 Total
Name Version Cate Flags License Repo Package Description
---- ------- ---- ------ ------- ------ ------------ ---------------------
timescaledb 2.18.2 TIME -dsl-- Timescale PIGSTY postgresql-17-timescaledb-tsl Enables scalable inserts and complex queries for time-series dat
postgis 3.5.2 GIS -ds--- GPL-2.0 PGDG postgresql-17-postgis-3 postgresql-$v-postgis-3-scripts PostGIS geometry and geography spatial types and functions
postgis_topology 3.5.2 GIS -ds--- GPL-2.0 PGDG postgresql-17-postgis-3 postgresql-$v-postgis-3-scripts PostGIS topology spatial types and functions
postgis_raster 3.5.2 GIS -ds--- GPL-2.0 PGDG postgresql-17-postgis-3 postgresql-$v-postgis-3-scripts PostGIS raster types and functions
postgis_sfcgal 3.5.2 GIS -ds--r GPL-2.0 PGDG postgresql-17-postgis-3 postgresql-$v-postgis-3-scripts PostGIS SFCGAL functions
postgis_tiger_geocoder 3.5.2 GIS -ds-t- GPL-2.0 PGDG postgresql-17-postgis-3 postgresql-$v-postgis-3-scripts PostGIS tiger geocoder and reverse geocoder
address_standardizer 3.5.2 GIS -ds--r GPL-2.0 PGDG postgresql-17-postgis-3 postgresql-$v-postgis-3-scripts Used to parse an address into constituent elements. Generally us
address_standardizer_data_us 3.5.2 GIS -ds--r GPL-2.0 PGDG postgresql-17-postgis-3 postgresql-$v-postgis-3-scripts Address Standardizer US dataset example
vector 0.8.0 RAG -ds--r PostgreSQL PGDG postgresql-17-pgvector vector data type and ivfflat and hnsw access methods
pg_search 0.15.2 FTS -ds-t- AGPL-3.0 PIGSTY postgresql-17-pg-search pg_search: Full text search for PostgreSQL using BM25
pgroonga 4.0.0 FTS -ds-tr PostgreSQL PIGSTY postgresql-17-pgroonga Use Groonga as index, fast full text search platform for all lan
pgroonga_database 4.0.0 FTS -ds-tr PostgreSQL PIGSTY postgresql-17-pgroonga PGroonga database management module
citus 13.0.1 OLAP -dsl-- AGPL-3.0 PIGSTY postgresql-17-citus Distributed PostgreSQL as an extension
citus_columnar 11.3-1 OLAP -ds--- AGPL-3.0 PIGSTY postgresql-17-citus Citus columnar storage engine
pg_mooncake 0.1.2 OLAP ------ MIT PIGSTY postgresql-17-pg-mooncake Columnstore Table in Postgres
plv8 3.2.3 LANG -ds--- PostgreSQL PIGSTY postgresql-17-plv8 PL/JavaScript (v8) trusted procedural language
pg_repack 1.5.2 ADMIN bds--- BSD 3-Clause PGDG postgresql-17-repack Reorganize tables in PostgreSQL databases with minimal locks
wal2json 2.5.3 ETL --s--x BSD 3-Clause PGDG postgresql-17-wal2json Changing data capture in JSON format
(18 Rows) (Flags: b = HasBin, d = HasDDL, s = HasSolib, l = NeedLoad, t = Trusted, r = Relocatable, x = Unknown)
ext add
安装一个或多个 PostgreSQL 扩展。
安装 postgres 扩展
用法:
pig ext add [flags]
别名:
add, a, install, ins
示例:
Description:
pig ext install pg_duckdb # 安装一个扩展
pig ext install postgis timescaledb # 安装多个扩展
pig ext add pgvector pgvectorscale # 其他别名:add, ins, i, a
pig ext ins pg_search -y # 自动确认安装
pig ext install pgsql # 安装最新版本的 postgresql kernel
pig ext a pg17 # 安装 postgresql 17 kernel packages
pig ext ins pg16 # 安装 postgresql 16 kernel packages
pig ext install pg15-core # 安装 postgresql 15 core packages
pig ext install pg14-main -y # 安装 pg 14 + essential extensions (vector, repack, wal2json)
pig ext install pg13-devel --yes # 安装 pg 13 devel packages (auto-confirm)
pig ext install pgsql-common # 安装 common utils such as patroni pgbouncer pgbackrest,...
Flags:
-h, --help help for add
-y, --yes 自动确认安装
ext rm
移除一个或多个 PostgreSQL 扩展。
pig ext rm [ext...] [-y]
选项:
-y, --yes
: 自动确认移除示例:
pig ext rm pg_duckdb # 移除特定扩展
pig ext rm postgis timescaledb # 移除多个扩展
pig ext rm pgvector -y # 自动确认移除
ext update
更新已安装的扩展到最新版本。
pig ext update [ext...] [-y]
选项:
-y, --yes
: 自动确认更新示例:
pig ext update # 更新所有已安装的扩展
pig ext update postgis # 更新特定扩展
pig ext update postgis timescaledb # 更新多个扩展
pig ext update -y # 自动确认更新
pig import
下载扩展包到本地仓库进行离线安装。
用法:
pig ext import [ext...] [flags]
别名:
import, get
示例:
pig ext import postgis # 导入 postgis 扩展包
pig ext import timescaledb pg_cron # 导入多个扩展
pig ext import pg16 # 导入 postgresql 16 包
pig ext import pgsql-common # 导入 common utilities
pig ext import -d /www/pigsty postgis # 导入到特定路径
Flags:
-h, --help help for import
-d, --repo string specify repo dir (default "/www/pigsty")
选项:
-d, --repo
: 指定仓库目录(默认:/www/pigsty)示例:
pig ext import postgis # 导入 PostGIS 包
pig ext import timescaledb pg_cron # 导入多个扩展包
pig ext import pg16 # 导入 PostgreSQL 16 包
pig ext import pgsql-common # 导入 common 实用程序包
ext link
将 PostgreSQL 安装链接到系统 PATH。
将 postgres 链接到活动 PATH
用法:
pig ext link <-v pgver|-p pgpath> [flags]
别名:
link, ln
示例:
pig ext link 16 # 将 pgdg postgresql 16 链接到 /usr/pgsql
pig ext link /usr/pgsql-16 # 将特定 pg 链接到 /usr/pgsql
pig ext link /u01/polardb_pg # 将 polardb pg 链接到 /usr/pgsql
pig ext link null|none|nil|nop|no # 取消链接当前 postgres 安装
Flags:
-h, --help help for link
示例:
pig ext link 17 # 将 PostgreSQL 17 链接到 /usr/pgsql
pig ext link 16 # 将 PostgreSQL 16 链接到 /usr/pgsql
pig ext link /usr/pgsql-16 # 从特定路径将 PostgreSQL 链接至 /usr/pgsql
pig ext link null # 取消链接当前 PostgreSQL 安装
upgrade
将扩展目录升级到最新版本。
pig ext upgrade
pig 也可以作为 Pigsty 的命令行工具使用 - Pigsty 是一个功能完备的免费 PostgreSQL RDS。 它为您的 PostgreSQL 集群带来了高可用、时间点恢复、监控、基础设施即代码以及所有扩展功能。
pig sty -初始化(下载)、引导、配置和安装 Pigsty
pig sty init [-pfvd] # 安装 pigsty(默认安装到 ~/pigsty)
pig sty boot [-rpk] # 安装 ansible 并准备离线包
pig sty conf [-civrsxn] # 配置 pigsty 并生成配置文件
pig sty install # 使用 pigsty 安装和配置环境(危险操作!)
pig sty get # 下载 pigsty 源代码包
pig sty list # 列出可用的 pigsty 版本
用法:
pig sty [命令]
别名:
sty, s, pigsty
示例:
入门指南:https://pigsty.io/docs/setup/install/
pig sty init # 解压并初始化 ~/pigsty
pig sty boot # 安装 ansible 和其他依赖
pig sty conf # 生成 pigsty.yml 配置文件
pig sty install # 运行 pigsty/install.yml playbook
可用命令:
boot 引导 Pigsty
conf 配置 Pigsty
get 下载可用的 pigsty 版本
init 安装 Pigsty
install 运行 pigsty install.yml playbook
list 列出可用的 pigsty 版本
参数:
-h, --help 显示帮助信息
您可以使用 pig sty
子命令在当前节点上引导 pigsty。
sty init
pig sty init
-p | --path : 安装路径,默认为 ~/pigsty
-f | --force : 强制覆盖现有的 pigsty 目录
-v | --version : pigsty 版本,默认使用内置版本
-d | --dir : 下载目录,默认为 /tmp
用法:
pig sty init [参数]
别名:
init, i
示例:
pig sty init # 使用内置版本安装到 ~/pigsty
pig sty init -f # 安装并覆盖现有的 pigsty 目录
pig sty init -p /tmp/pigsty # 安装到其他位置 /tmp/pigsty
pig sty init -v 3.3 # 获取并安装特定版本 v3.3.0
pig sty init 3 # 获取并安装 v3 的最新版本
参数:
-d, --dir string pigsty 下载目录(默认为 "/tmp")
-f, --force 覆盖现有的 pigsty(默认为 false)
-h, --help 显示帮助信息
-p, --path string 目标目录(默认为 "~/pigsty")
-v, --version string pigsty 版本字符串
sty boot
pig sty boot
[-r|--region <region] [default,china,europe]
[-p|--path <path>] 指定另一个离线包路径
[-k|--keep] 引导过程中保留现有的上游仓库
详情请查看 https://pigsty.io/docs/setup/offline/#bootstrap
用法:
pig sty boot [参数]
别名:
boot, b, bootstrap
参数:
-h, --help 显示帮助信息
-k, --keep 保留现有仓库
-p, --path string 离线包路径
-r, --region string default,china,europe,...
sty conf
使用 ./configure 配置 pigsty
pig sty conf
[-c|--conf <name> # [meta|dual|trio|full|prod]
[--ip <ip>] # 主 IP 地址(使用 -s 跳过)
[-v|--version <pgver> # [17|16|15|14|13]
[-r|--region <region> # [default|china|europe]
[-s|--skip] # 跳过 IP 地址探测
[-x|--proxy] # 从环境变量写入代理设置
[-n|--non-interactive] # 非交互模式
详情请查看 https://pigsty.io/docs/setup/install/#configure
用法:
pig sty conf [参数]
别名:
conf, c, configure
示例:
pig sty conf # 使用默认的 conf/meta.yml 配置
pig sty conf -c rich -x # 使用 rich.yml 模板,添加代理环境到配置中
pig sty conf -c supa --ip=10.9.8.7 # 使用 supa 模板,将 10.9.8.7 设为主 IP
pig sty conf -c full -v 16 # 使用 4 节点完整模板,默认使用 pg16
pig sty conf -c oss -s # 使用 oss 模板,跳过 IP 探测和替换
pig sty conf -c slim -s -r china # 使用 2 节点精简模板,指定 china 为区域
参数:
-c, --conf string 配置模板名称
-h, --help 显示帮助信息
--ip string 主 IP 地址
-n, --non-interactive 非交互式配置
-p, --proxy 配置代理环境
-r, --region string 上游仓库区域
-s, --skip 跳过 IP 探测
-v, --version string PostgreSQL 主版本
sty install
运行 pigsty install.yml playbook
用法:
pig sty install [参数]
别名:
install, ins, install
参数:
-h, --help 显示帮助信息
pig build
是一个强大的命令行工具,它简化了构建和管理 PostgreSQL 扩展的整个工作流程 - 从设置构建环境到跨不同操作系统编译扩展。
Build Postgres Extension
Usage:
pig build [command]
Aliases:
build, b
Examples:
pig build - Build Postgres Extension
pig build repo # init build repo (=repo set -ru)
pig build tool [mini|full|...] # init build toolset
pig build proxy [id@host:port ] # init build proxy (optional)
pig build rust [-v <pgrx_ver>] # init rustc & pgrx (0.12.9)
pig build spec # init build spec repo
pig build get [all|std|..] # get ext code tarball with prefixes
pig build ext [extname...] # build extension
Available Commands:
ext Build extension
get Download source code tarball
proxy Initialize build proxy
repo Initialize required repos
rust Initialize rust and pgrx environment
spec Initialize building spec repo
tool Initialize build tools
Flags:
-h, --help help for build
Global Flags:
--debug enable debug mode
-i, --inventory string config inventory path
--log-level string log level: debug, info, warn, error, fatal, panic (default "info")
--log-path string log file path, terminal by default
设置构建环境:
# 初始化仓库和工具
pig build repo
pig build tool
pig build spec
# 对于基于 Rust 的扩展
pig build rust
# 下载标准扩展
pig build get std # 下载所有压缩包
pig build get citus timescaledb # 下载特定压缩包
# 构建特定扩展
pig build ext citus
使用 pig build
构建 PostgreSQL 扩展的典型工作流程:
pig build repo
pig build tool
pig build proxy id@host:port
pig build rust
pig build spec
pig build get [prefixes]
pig build ext [extname...]
pig build
命令支持:
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
”)此命令:
build spec
别名: s
根据操作系统初始化构建规范仓库:
pig build spec
对于 EL 发行版 (RHEL, Rocky, CentOS):
~/rpmbuild
上设置 RPM 构建文件层次结构对于 DEB 发行版 (Debian, Ubuntu):
~/deb
上设置构建目录文件层次结构该仓库包含 PIGSTY 维护的扩展的构建规范(rpmspecs 或 debian control 文件)。
build get
别名: get
下载 PostgreSQL 扩展的源代码压缩包。
pig build get [prefixes|all|std]
参数:
std
: 下载标准包(不包括大型包,默认行为)all
: 下载所有可用的源代码压缩包(用于批量构建)[prefixes]
: 一个或多个用于过滤要下载的包的前缀下载的文件存储在:
~/rpmbuild/SOURCES/
~/deb/tarball/
示例:
pig build get std # 获取标准包(除了 pg_duckdb/pg_mooncake/omnigres/plv8,太大了)
pig build get all # 获取所有可用的源代码压缩包
pig build get pg_mooncake # 获取 pg_mooncake 源代码
pig build get pg_duckdb # 获取 pg_duckdb 源代码
pig build get omnigres # 获取 omnigres 源代码
pig build get plv8 # 获取 plv8 源代码
pig build get citus # 获取 citus 源代码
pig build get timescaledb # 获取 timescaledb 源代码
pig build get hydra # 获取 hydra 源代码
pig build get pgjwt # 获取 pgjwt 源代码
....
build ext
别名: e
使用当前操作系统的适当构建环境构建 PostgreSQL 扩展。
pig build ext [extname...]
参数:
extname
: 要构建的一个或多个扩展名对于每个扩展,该命令:
~/rpmbuild/BUILD
或 ~/deb/build
)make citus
)它实际上利用规范仓库中的 make <ext>
命令来构建扩展。
build proxy
别名: p
设置代理服务器以访问外部资源,在网络访问受限的环境中很有用。
这是完全可选的,如果你没有任何连接问题就不需要它。
pig build proxy [id@host:port] [local]
参数:
id@host:port
: 远程 v2ray 代理规范,格式为 user-id@host:port
local
: v2ray 要绑定的本地地址(默认: “127.0.0.1:12345”)此命令:
/usr/local/bin/v2ray
)/etc/profile.d/proxy.sh
中创建环境设置脚本你可以通过运行以下命令加载代理环境变量:
. /etc/profile.d/proxy.sh
设置后,你可以使用以下别名:
po
: 启用代理(在当前 shell 会话中设置代理环境变量)px
: 禁用代理(取消设置代理环境变量)pck
: 检查代理状态(通过 ping google)pig
itself runs on any x86_64/aarch64
compatible Linux distribution.
But the pig extension repo only supports the following Linux distributions:
Code | Distribution | x86_64 |
aarch64 |
---|---|---|---|
el9 | RHEL 9 / Rocky9 / Alma9 / … | PG 17 - 13 | PG 17 - 13 |
el8 | RHEL 8 / Rocky8 / Alma8 / … | PG 17 - 13 | PG 17 - 13 |
u24 | Ubuntu 24.04 (noble ) |
PG 17 - 13 | PG 17 - 13 |
u22 | Ubuntu 22.04 (jammy ) |
PG 17 - 13 | PG 17 - 13 |
d12 | Debian 12 (bookworm ) |
PG 17 - 13 | PG 17 - 13 |
Here are some bad cases and limitation for above Linux distros:
pg_duckdb
el8:*:*
pljava
: el8:*:*
pllua
: el8:arm:13,14,15
h3
: el8.amd.pg17
jdbc_fdw
: el:arm:*
pg_partman
: u24:*:13
wiltondb
: d12:*:*
citus
and hydra
are mutually exclusivepg_duckdb
will invalidate duckdb_fdw
documentdb
is not available on arm
arch