这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

包管理器:pig

PostgreSQL扩展包管理器 pig

Version: v0.3.2 License: Apache-2.0 Extensions: 405

pig 是一个开源的 PostgreSQL(与扩展)包管理器,在 主流Linux (amd64 / arm64) 发行版上可用。

pig 可以屏蔽 PG 安装的复杂度,利用OS原生包管理器一键安装 PostgreSQL 13-17 以及 405 个 PG生态扩展插件。

博客:交付 PostgreSQL 扩展的理想方式!

1 - 快速上手

Get Started with pig, the PostgreSQL extension manager.

通过脚本安装 pig 包(或使用其他方式):

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 扩展

查看repoext管理命令的详细信息。

asciicast


示例

激进的仓库管理

默认的 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

你可以用以下命令安装 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 版本号,如 1716 等:

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",

为其他 PG 版本安装

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



2 - 为啥用它

为什么我们需要一个专为 PostgreSQL 及其生态组件于扩展而设计的包管理器?

有没有想过,安装或升级 PostgreSQL 扩展时,不再需要翻阅过时的 README、晦涩的 configure 脚本,或者随便找的 GitHub 分支和补丁?痛苦的现实是,Postgres 强大的扩展性往往意味着复杂的设置,尤其是在你需要兼顾多个发行版或 CPU 架构时。

pig-meme

这时,Pig 就应运而生了。Pig 是一个基于 Go 的包管理器,旨在一举解决 Postgres 及其超过 400 个扩展的问题。无论是 TimescaleDB、Citus、PGVector,还是 20 多个 Rust 扩展,甚至是自托管 Supabase 所需的所有工具 —— Pig 的统一命令行界面让这些都触手可及。 它去除了混乱的源代码编译和半成品的仓库,提供与 Debian、Ubuntu、RedHat 系列以及 x86 和 ARM 架构完美兼容的、版本对齐的 RPM/DEB 包。无需猜测,也无需麻烦。

pig

Pig 并不是重新发明轮子,而是利用你系统原生的包管理器(APT、YUM、DNF),并遵循官方 PGDG 包装规范,确保无缝对接。这意味着你不必在“正确的方式”和“快速的方式”之间做选择;Pig 尊重你现有的仓库,符合操作系统的最佳实践,并且与其他你已经使用的包完美兼容。

准备好在没有繁琐操作的情况下为你的 Postgres 增加超级能力吗?查看 GitHub 了解文档、安装步骤,并一睹其庞大的扩展列表。然后,看看你的本地 Postgres 实例如何变成一个充满专业模块的强大工具 —— 无需黑魔法。如果 Postgres 的未来是不可阻挡的可扩展性,那么 Pig 就是帮助你解锁这一未来的神灯。说实话,没人抱怨自己拥有太多扩展。

小猪骑大象:PG内核与扩展包管理神器

ANNOUNCE pig: The Postgres Extension Wizard




3 - 安装

使用脚本命令,YUM/APT 等方式安装 pig 包管理器

通过脚本安装

安装 pig 最简单的方法是运行以下脚本:

curl -fsSL https://repo.pigsty.io/pig | bash

该脚本会直接从 pigsty 仓库下载最新版本的 pig RPM/DEB 包,并通过 rpmdpkg 进行安装。


通过 YUM 安装

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

通过 APT 安装

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 自身升级到最新版本



4 - Pigsty 命令行工具说明

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                   # 将仓库缓存为离线包

Pigsty管理

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。




5 - 仓库管理:repo

如何使用 pig repo 子命令管理 APT/YUM 软件仓库?

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

此命令:

  1. 根据以下条件验证指定模块是否存在并转换为实际仓库
  • 区域、发行版、操作系统主版本、架构
  1. 如果提供了 -r|--remove 标志,它会将现有仓库移动到备份文件夹:
  • EL 系统:/etc/yum.repos.d/backup
  • Debian 系统:/etc/apt/sources.list.d/backup
  1. 在系统的仓库目录中创建仓库文件
  • EL 系统:/etc/yum.repos.d/<module>.repo
  • Debian 系统:/etc/apt/sources.list.d/<module>.list
  1. 如果提供了 -u|--update 标志,它会运行 apt updatednf 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 updateyum 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 updatednf 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

此命令:

  1. 如果目录不存在则创建目录结构
  2. 使用仓库工具创建本地仓库(确保系统已安装这些工具)
  • EL 系统:createrepo_c
  • Debian 系统: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

此命令:

  1. 将 tarball 解压到目标目录
  2. 设置本地仓库配置
  3. 更新仓库元数据



6 - 扩展管理:ext

如何使用 pig ext 子命令管理 PostgreSQL 扩展插件?

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

查看 扩展列表 获取可用扩展及其名称。

  1. 当未指定 PostgreSQL 版本时,工具会尝试从 PATH 中的 pg_config 检测活动的 PostgreSQL 安装
  2. PostgreSQL 可以通过主版本号(-v)或 pg_config 路径(-p)指定。 如果给定 -v,pig 将使用给定版本的 PGDG 内核包的默认路径。
    • 在 EL 发行版上,PG$v 的路径是 /usr/pgsql-$v/bin/pg_config
    • 在 DEB 发行版上,PG$v 的路径是 /usr/lib/postgresql/$v/bin/pg_config 等 如果给定 -p,pig 将使用 pg_config 路径查找 PostgreSQL 安装。
  3. 扩展管理器根据底层操作系统支持不同的包格式:
    • RHEL/CentOS/Rocky Linux/AlmaLinux 使用 RPM 包
    • Debian/Ubuntu 使用 DEB 包
  4. 某些扩展可能有依赖项,这些依赖项会在安装过程中自动解析。
  5. 谨慎使用 -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 实用程序包

将 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



7 - 管理 Pigsty

如何使用 pig sty 子命令管理 Pigsty 发行版本身?

概述

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   显示帮助信息



8 - 扩展构建:build

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

pig build 是一个强大的命令行工具,它简化了构建和管理 PostgreSQL 扩展的整个工作流程 - 从设置构建环境到跨不同操作系统编译扩展。


概述

Build Postgres Extension

Usage:
  pig build [command]

Aliases:
  build, b

Examples:
pig build - Build Postgres Extension

  pig build repo                   # init build repo (=repo set -ru)
  pig build tool  [mini|full|...]  # init build toolset
  pig build proxy [id@host:port ]  # init build proxy (optional)
  pig build rust  [-v <pgrx_ver>]  # init rustc & pgrx (0.12.9)
  pig build spec                   # init build spec repo
  pig build get   [all|std|..]     # get ext code tarball with prefixes
  pig build ext   [extname...]     # build extension


Available Commands:
  ext         Build extension
  get         Download source code tarball
  proxy       Initialize build proxy
  repo        Initialize required repos
  rust        Initialize rust and pgrx environment
  spec        Initialize building spec repo
  tool        Initialize build tools

Flags:
  -h, --help   help for build

Global Flags:
      --debug              enable debug mode
  -i, --inventory string   config inventory path
      --log-level string   log level: debug, info, warn, error, fatal, panic (default "info")
      --log-path string    log file path, terminal by default

示例

设置构建环境:

# 初始化仓库和工具
pig build repo
pig build tool
pig build spec

# 对于基于 Rust 的扩展
pig build rust

# 下载标准扩展
pig build get std                # 下载所有压缩包
pig build get citus timescaledb  # 下载特定压缩包

# 构建特定扩展
pig build ext citus

构建工作流

使用 pig build 构建 PostgreSQL 扩展的典型工作流程:

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

注意事项

  • EL 和 DEB 系统的构建过程有所不同
  • 某些命令可能需要 sudo 权限来安装系统包
  • 对于基于 Rust 的扩展,需要先设置 Rust 环境
  • 代理设置是可选的,仅在网络访问受限的环境中需要

操作系统支持

pig build 命令支持:

  • EL 发行版: RHEL, Rocky, CentOS (在版本 8 和 9 上测试通过)
  • DEB 发行版: Debian (在版本 12 上测试通过), Ubuntu (在版本 22.04 和 24.04 上测试通过)
  • 未来可能通过 homebrew 支持 MacOS

build repo

别名: r

通过运行带有更新和移除标志的仓库添加命令,添加构建 PostgreSQL 扩展所需的上游仓库。

pig build repo

build tool

别名: t

安装编译 PostgreSQL 扩展所需的构建工具。

pig build tool

参数:

  • mode: 安装模式 (默认: “mini”)
    • 可用模式取决于操作系统和发行版

此命令安装必要的构建依赖,包括:

对于 EL 发行版 (RHEL, Rocky, CentOS):

make, cmake, ninja-build, pkg-config, lld, git, lz4, unzip, ncdu, rsync, vray,
rpmdevtools, dnf-utils, pgdg-srpm-macros, postgresql1*-devel, postgresql1*-server, jq,
readline-devel, zlib-devel, libxml2-devel, lz4-devel, libzstd-devel, krb5-devel,

对于 DEB 发行版 (Debian, Ubuntu):

make, cmake, ninja-build, pkg-config, lld, git, lz4, unzip, ncdu, rsync, vray,
debhelper, devscripts, fakeroot, postgresql-all, postgresql-server-dev-all, jq,
libreadline-dev, zlib1g-dev, libxml2-dev, liblz4-dev, libzstd-dev, libkrb5-dev,

build rust

别名: rs

设置用于构建 PostgreSQL Rust 扩展的 Rust 环境和 PGRX。

pig build rust [-v <pgrx_ver>]

参数:

  • -v <pgrx_ver>: 要安装的 PGRX 版本 (默认: “0.12.9”)

此命令:

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

build spec

别名: s

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

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

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

    1. 从 GitHub 克隆 DEB 规范仓库
    2. ~/deb 上设置构建目录文件层次结构

该仓库包含 PIGSTY 维护的扩展的构建规范(rpmspecs 或 debian control 文件)。


build get

别名: get

下载 PostgreSQL 扩展的源代码压缩包。

pig build get [prefixes|all|std]

参数:

  • std: 下载标准包(不包括大型包,默认行为)
  • all: 下载所有可用的源代码压缩包(用于批量构建)
  • [prefixes]: 一个或多个用于过滤要下载的包的前缀

下载的文件存储在:

  • EL: ~/rpmbuild/SOURCES/
  • DEB: ~/deb/tarball/

示例:

pig build get std                # 获取标准包(除了 pg_duckdb/pg_mooncake/omnigres/plv8,太大了)
pig build get all                # 获取所有可用的源代码压缩包

pig build get pg_mooncake        # 获取 pg_mooncake 源代码
pig build get pg_duckdb          # 获取 pg_duckdb 源代码
pig build get omnigres           # 获取 omnigres 源代码
pig build get plv8               # 获取 plv8 源代码

pig build get citus              # 获取 citus 源代码
pig build get timescaledb        # 获取 timescaledb 源代码
pig build get hydra              # 获取 hydra 源代码
pig build get pgjwt              # 获取 pgjwt 源代码
....

build ext

别名: e

使用当前操作系统的适当构建环境构建 PostgreSQL 扩展。

pig build ext [extname...]

参数:

  • extname: 要构建的一个或多个扩展名

对于每个扩展,该命令:

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

它实际上利用规范仓库中的 make <ext> 命令来构建扩展。


build proxy

别名: p

设置代理服务器以访问外部资源,在网络访问受限的环境中很有用。

这是完全可选的,如果你没有任何连接问题就不需要它。

pig build proxy [id@host:port] [local]

参数:

  • id@host:port: 远程 v2ray 代理规范,格式为 user-id@host:port
  • local: v2ray 要绑定的本地地址(默认: “127.0.0.1:12345”)

此命令:

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

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

. /etc/profile.d/proxy.sh

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

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



9 - 可用系统

Linux 操作系统发行版兼容性矩阵,哪些发行版提供了开箱即用的扩展支持?

pig itself runs on any x86_64/aarch64 compatible Linux distribution.

But the pig extension repo only supports the following Linux distributions:

  • RHEL 8 / 9
  • Debian 12
  • Ubuntu 22.04 / 24.04
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: