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

返回本页常规视图.

参考

详细的参考信息与列表:支持的操作系统,模块,参数,监控指标,数据库扩展,同类对比,术语表等。

1 - Linux 兼容性

Pigsty 兼容的 Linux 操作系统发行版大版本,以及芯片架构指令集

Pigsty 运行于 Linux 操作系统上,支持 amd64/x86_64arm64/aarch64 架构,支持 ELDebianUbuntu 三大主流 Linux 发行版。

Pigsty 不使用任何虚拟化容器化技术,直接运行于裸操作系统上。我们为三大主流 Linux 发行版最近两个大版本的两种架构提供支持。

概述

Pigsty 推荐使用的操作系统版本:RockyLinux 10.1、Ubuntu 24.04.3、Debian 13.3。

发行版架构系统代码PG18PG17PG16PG15PG14PG13
RHEL / Rocky / Alma 10x86_64el10.x86_64
RHEL / Rocky / Alma 10aarch64el10.aarch64
Ubuntu 24.04 (noble)x86_64u24.x86_64
Ubuntu 24.04 (noble)aarch64u24.aarch64
Debian 13 (trixie)x86_64d13.x86_64
Debian 13 (trixie)aarch64d13.aarch64

EL

Pigsty 支持 RHEL / Rocky / Alma / Anolis / CentOS 8、9、10 版本。

EL 发行版架构系统代码PG18PG17PG16PG15PG14PG13
RHEL10 / Rocky10 / Alma10x86_64el10.x86_64
RHEL10 / Rocky10 / Alma10aarch64el10.aarch64
RHEL9 / Rocky9 / Alma9x86_64el9.x86_64
RHEL9 / Rocky9 / Alma9aarch64el9.aarch64
RHEL8 / Rocky8 / Alma8x86_64el8.x86_64
RHEL8 / Rocky8 / Alma8aarch64el8.aarch64
RHEL7 / CentOS7x86_64el7.x86_64
RHEL7 / CentOS7aarch64-

Ubuntu

Pigsty 支持 Ubuntu 24.04 / 22.04:

Ubuntu 发行版架构系统代码PG18PG17PG16PG15PG14PG13
Ubuntu 24.04 (noble)x86_64u24.x86_64
Ubuntu 24.04 (noble)aarch64u24.aarch64
Ubuntu 22.04 (jammy)x86_64u22.x86_64
Ubuntu 22.04 (jammy)aarch64u22.aarch64
Ubuntu 20.04 (focal)x86_64u20.x86_64
Ubuntu 20.04 (focal)aarch64-

Debian

Pigsty 支持 Debian 12 / 13,推荐使用最新的 Debian 13.3

Debian 发行版架构系统代码PG18PG17PG16PG15PG14PG13
Debian 13 (trixie)x86_64d13.x86_64
Debian 13 (trixie)aarch64d13.aarch64
Debian 12 (bookworm)x86_64d12.x86_64
Debian 12 (bookworm)aarch64d12.aarch64
Debian 11 (bullseye)x86_64d11.x86_64
Debian 11 (bullseye)aarch64-

Vagrant

当您使用本地虚拟机部署 Pigsty 时,可以考虑使用以下 Vagrant 操作系统镜像,这也是 Pigsty 开发测试使用的镜像。

系统镜像
AlmaLinux 8.10cloud-image/almalinux-8
Rocky 9.7bento/rockylinux-9
AlmaLinux 10.1cloud-image/almalinux-10
Debian 12.13cloud-image/debian-12
Debian 13.3cloud-image/debian-13
Ubuntu 22.04cloud-image/ubuntu-22.04
Ubuntu 24.04bento/ubuntu-24.04

Terraform

当您使用云服务器部署 Pigsty 时,可以考虑在 Terraform 中使用以下操作系统基础镜像,以 阿里云 为例:

x86_64镜像
Rocky 8.10rockylinux_8_10_x64_20G_alibase_20240923.vhd
Rocky 9.7rockylinux_9_7_x64_20G_alibase_20260119.vhd
Rocky 10.1rockylinux_10_1_x64_20G_alibase_20260119.vhd
Ubuntu 22.04ubuntu_22_04_x64_20G_alibase_20240926.vhd
Ubuntu 24.04ubuntu_24_04_x64_20G_alibase_20240923.vhd
Debian 12.13debian_12_13_x64_20G_alibase_20241201.vhd
Debian 13.3debian_13_3_x64_20G_alibase_20250101.vhd
aarch64镜像
Rocky 8.10rockylinux_8_10_arm64_20G_alibase_20251120.vhd
Rocky 9.7rockylinux_9_7_arm64_20G_alibase_20260119.vhd
Rocky 10.1rockylinux_10_1_arm64_20G_alibase_20260119.vhd
Ubuntu 22.04ubuntu_22_04_arm64_20G_alibase_20251126.vhd
Ubuntu 24.04ubuntu_24_04_arm64_20G_alibase_20251126.vhd
Debian 12.13debian_12_13_arm64_20G_alibase_20250825.vhd
Debian 13.3debian_13_3_arm64_20G_alibase_20251121.vhd

2 - 模块列表

本文列出了 Pigsty 中可用的功能模块,以及后续的功能模块规划。

正式模块

模块类别状态文档入口简介
PGSQL核心GA/docs/pgsql高可用 PostgreSQL 集群,内置备份、监控、SOP 与扩展生态。
INFRA核心GA/docs/infra本地软件仓库 + VictoriaMetrics/Logs/Traces + Grafana 等基础设施。
NODE核心GA/docs/node节点初始化与收敛:系统调优、管理员、HAProxy、Vector、Docker 等。
ETCD核心GA/docs/etcdPostgreSQL 高可用 DCS(服务发现、配置、选主元数据)。
MINIO扩展GA/docs/minioS3 兼容对象存储,可作为 PostgreSQL 备份仓库。
REDIS扩展GA/docs/redisRedis 独立/哨兵/集群模式部署与监控。
FERRET扩展GA/docs/ferretFerretDB 模块(MONGO API 兼容),为 PG 提供 MongoDB 协议访问。
DOCKER扩展GA/docs/dockerDocker Daemon 及容器化应用运行基础能力。
JUICE扩展BETA/docs/juiceJuiceFS 分布式文件系统,使用 PostgreSQL 作为元数据引擎。
VIBE扩展BETA/docs/vibe浏览器化开发环境,集成 Code-Server、JupyterLab、Node.js 与 Claude Code。

核心模块

Pigsty 提供了四个 基础 功能模块,对于提供完整高可用的 PostgreSQL 服务非常重要:

  • PGSQL:带有高可用,时间点恢复,IaC,SOP,监控系统,以及 444 个扩展插件的自治的 PostgreSQL 集群。
  • INFRA:本地软件仓库、Prometheus、Grafana、Loki、AlertManager、PushGateway、Blackbox Exporter…
  • NODE:调整节点到所需状态、名称、时区、NTP、ssh、sudo、haproxy、docker、vector、keepalived
  • ETCD:分布式键值存储,用作高可用 Postgres 集群的 DCS:共识选主/配置管理/服务发现。

尽管这四个模块通常会同时安装,但单独使用也是可行的 —— 只有 NODE 模块通常是必选的。


扩展模块

Pigsty 提供了六个 扩展 功能模块,它们对于核心功能来说并非必须,但可以用于增强 PostgreSQL 的能力:

  • MINIO:S3 兼容的简单对象存储服务器,可作为可选的 PostgreSQL 数据库备份仓库,带有生产部署支持与监控。
  • REDIS:Redis 服务器,高性能数据结构服务器,支持独立主从、哨兵、集群模式生产部署,并带有完善的监控支持。
  • MONGO:FerretDB 原生部署支持 —— 它为 PostgreSQL 添加了 MongoDB 线缆协议级别的 API 兼容支持!
  • DOCKER:Docker Daemon 服务,允许用户一键拉起容器化的无状态软件工具模板,为 Pigsty 加装各种功能!
  • JUICE:JuiceFS 分布式文件系统模块,以 PostgreSQL 作为元数据引擎,提供可共享的 POSIX 存储能力。
  • VIBE:浏览器化开发环境模块,集成 Code-Server、JupyterLab、Node.js 与 Claude Code,开箱即用。

生态模块

以下模块与 PostgreSQL 生态紧密相关,属于可选生态能力,不计入上述 10 个正式模块:

3 - 扩展列表

本文列出了 Pigsty 支持的 PostgreSQL 扩展插件,以及这些插件在不同系统下的支持情况。

Pigsty 扩展完整信息请见 PGEXT.CLOUD

当前共有 451 个可用 PostgreSQL 扩展。

TIME

扩展版名称版本号分类说明
timescaledb2.25.0TIME时序数据库扩展插件
timescaledb_toolkit1.22.0TIME超表分析查询,时间序列流式处理,以及其他SQL工具
timeseries0.2.0TIME时序数据API封装
periods1.2.3TIME为 PERIODs 和 SYSTEM VERSIONING 提供标准 SQL 功能
temporal_tables1.2.2TIME时态表功能支持
emaj4.7.1TIME让数据库的子集具有细粒度日志和时间旅行功能
table_version1.11.1TIMEPostgreSQL 版本控制表扩展
pg_cron1.6.7TIME定时任务调度器
pg_task1.0.0TIME在特定时间点在后台执行SQL命令
pg_later0.4.0TIME执行查询,并在稍后异步获取查询结果
pg_background1.6TIME在后台运行 SQL 查询

GIS

扩展版名称版本号分类说明
postgis3.6.2GISPostGIS 几何和地理空间扩展
postgis_topology3.6.2GISPostGIS 拓扑空间类型和函数
postgis_raster3.6.2GISPostGIS 光栅类型和函数
postgis_sfcgal3.6.2GISPostGIS SFCGAL 函数
postgis_tiger_geocoder3.6.2GISPostGIS tiger 地理编码器和反向地理编码器
address_standardizer3.6.2GIS地址标准化函数。
address_standardizer_data_us3.6.2GIS地址标准化函数:美国数据集示例
pgrouting4.0.1GIS提供寻路能力
pointcloud1.2.5GIS提供激光雷达点云数据类型支持
pointcloud_postgis1.2.5GIS将激光雷达点云与PostGIS几何类型相集成
h34.2.3GISH3六边形层级索引支持
h3_postgis4.2.3GISH3与PostGIS集成的扩展插件
q3c2.0.1GISQ3C天空索引插件
ogr_fdw1.1.7GISGIS 数据外部数据源包装器
geoip0.3.0GISIP 地理位置扩展(围绕 MaxMind GeoLite 数据集的包装器)
pg_polyline0.0.1GISGoogle快速Polyline编码解码扩展
pg_geohash1.0GIS使用GeoHash处理空间坐标的函数包
mobilitydb1.3.0GISMobilityDB地理空间投影数据管理分析平台
mobilitydb_datagen1.3.0GISMobilityDB随机数据生成函数
tzf0.2.3GIS快速根据GPS经纬度坐标查找时区
earthdistance1.2GIS计算地球表面上的大圆距离

RAG

扩展版名称版本号分类说明
vector0.8.1RAG向量数据类型和 ivfflat / hnsw 访问方法
vchord1.1.0RAG使用Rust重写的高性能向量扩展
vectorscale0.9.0RAG使用DiskANN算法对向量进行高效索引
vectorize0.26.0RAG在PostgreSQL中封装RAG向量检索服务
pg_similarity1.0RAG提供17种距离度量函数
smlar1.0RAG高效的相似度搜索函数
pg_summarize0.0.1RAG使用LLM对文本字段进行总结
pg_tiktoken0.0.1RAG在PostgreSQL中计算OpenAI使用的Token数
pg4ml2.0RAGPG4ML是一个机器学习框架
pgml2.10.0RAGPostgresML:用SQL运行机器学习算法并训练模型

FTS

扩展版名称版本号分类说明
pg_search0.21.7FTSParadeDB BM25算法全文检索插件,ES全文检索
pgroonga4.0.4FTS使用Groonga,面向所有语言的高速全文检索平台
pgroonga_database4.0.4FTSPGGroonga 数据库管理模块
pg_bigm1.2FTS基于二字组的多语言全文检索扩展
zhparser2.3FTS中文分词,全文搜索解析器
pg_bestmatch0.0.2FTS在数据库内生成BM25稀疏向量
vchord_bm250.3.0FTSBM25排序算法
pg_tokenizer0.1.1FTS用于全文检索的分词器
biscuit2.2.2FTS使用IAM的高性能文本模式匹配
pg_textsearch0.5.0FTS带有BM25排序的全文搜索扩展
hunspell_cs_cz1.0FTSHunspell捷克语全文检索词典
hunspell_de_de1.0FTSHunspell德语全文检索词典
hunspell_en_us1.0FTSHunspell英语全文检索词典
hunspell_fr1.0FTSHunspell法语全文检索词典
hunspell_ne_np1.0FTSHunspell尼泊尔语全文检索词典
hunspell_nl_nl1.0FTSHunspell荷兰语全文检索词典
hunspell_nn_no1.0FTSHunspell挪威语全文检索词典
hunspell_pt_pt1.0FTSHunspell葡萄牙语全文检索词典
hunspell_ru_ru1.0FTSHunspell俄语全文检索词典
hunspell_ru_ru_aot1.0FTSHunspell俄语全文检索词典(来自AOT.ru小组)
fuzzystrmatch1.2FTS确定字符串之间的相似性和距离
pg_trgm1.6FTS文本相似度测量函数与模糊检索

OLAP

扩展版名称版本号分类说明
citus14.0.0OLAPCitus 分布式数据库
citus_columnar14.0.0OLAPCitus 列式存储引擎
columnar1.1.2OLAP开源列式存储扩展
pg_analytics0.3.7OLAP由 DuckDB 驱动的数据分析引擎
pg_duckdb1.1.1OLAP在PostgreSQL中的嵌入式DuckDB扩展
pg_mooncake0.2.0OLAPPostgreSQL列式存储表
pg_clickhouse0.1.3OLAP从PostgreSQL中查询ClickHouse的接口
duckdb_fdw1.1.2OLAPDuckDB 外部数据源包装器
pg_parquet0.5.1OLAP在PostgreSQL与本地/S3中的Parquet文件复制数据
pg_fkpart1.7.0OLAP按外键实用程序进行表分区的扩展
pg_partman5.4.1OLAP用于按时间或 ID 管理分区表的扩展
plproxy2.11.0OLAP作为过程语言实现的数据库分区
pg_strom6.1OLAP使用GPU与NVMe加速大数据处理
tablefunc1.0OLAP交叉表函数

FEAT

扩展版名称版本号分类说明
age1.7.0FEATApache AGE,图数据库扩展 (Deb可用)
hll2.19FEAThyperloglog 数据类型
rum1.3.15FEATRUM 索引访问方法
pg_ai_query0.1.1FEATAI驱动的 Postgres SQL 查询生成
pg_ttl_index2.0.0FEAT基于TTL索引的自动数据过期清理
pg_graphql1.5.12FEATPG内的GraphQL支持
pg_jsonschema0.3.4FEAT提供JSON Schema校验能力
jsquery1.2FEAT用于内省 JSONB 数据类型的查询类型
pg_hint_plan1.8.0FEAT添加强制指定执行计划的能力
hypopg1.4.2FEAT假设索引,用于创建一个虚拟索引检验执行计划
index_advisor0.2.0FEAT查询索引建议器
plan_filter0.0.1FEAT使用执行计划代价过滤阻止特定查询语句
imgsmlr1.0FEAT使用Haar小波分析计算图片相似度
pg_ivm1.13FEAT增量维护的物化视图
pg_incremental1.4.1FEAT增量处理流式事件
pgmb1.0.0FEAT一个简单的PostgreSQL消息代理系统
pgmq1.10.0FEAT基于Postgres实现类似AWS SQS/RSMQ的消息队列
pgq3.5.1FEAT通用队列的PG实现
orioledb1.5FEATOrioleDB,下一代事务处理引擎
pg_cardano1.1.1FEATCardano相关工具包:加密函数,地址编解码,区块链处理
rdkit202503.1FEAT在PostgreSQL化学领域数据管理功能
omni0.2.14FEATPostgreSQL即平台,Omnigres主扩展与加载器
omni_auth0.1.3FEATOmnigres 基础会话认证管理模块
omni_aws0.1.2FEATOmnigres AWS S3 API封装
omni_cloudevents0.1.0FEATOmnigres CloudEvents 支持
omni_containers0.2.0FEATOmnigres Docker容器管理模块
omni_credentials0.2.0FEATOmnigres 应用密钥管理模块
omni_csv0.1.1FEATOmnigres CSV 工具箱
omni_datasets0.1.0FEATOmnigres 数据库置备工具
omni_email0.1.0FEATOmnigres Email 框架
omni_http0.1.0FEATOmnigres 基本HTTP类型
omni_httpc0.1.10FEATOmnigres HTTP客户端
omni_httpd0.4.11FEATOmnigres HTTP服务器
omni_id0.4.3FEATOmnigres ID身份数据类型
omni_json0.1.1FEATOmnigres JSON工具箱
omni_kube0.4.2FEATOmnigres Kubernetes集成模块
omni_ledger0.1.3FEATOmnigres 金融账本模块
omni_manifest0.1.2FEATOmnigres 包管理清单模块
omni_mimetypes0.1.0FEATOmnigres MIME数据类型
omni_os0.1.1FEATOmnigres 操作系统集成模块
omni_polyfill0.2.2FEATOmnigres Postgres多态API
omni_python0.1.1FEATOmnigres 第一类Python支持模块
omni_regex0.1.0FEATOmnigres PCRE兼容正则表达式模块
omni_rest0.1.1FEATOmnigres REST API 工具包
omni_schema0.3.0FEATOmnigres 高级模式管理组件
omni_seq0.1.1FEATOmnigres 分布式整型序列号
omni_service0.1.0FEATOmnigres 服务管理器
omni_session0.2.0FEATOmnigres 会话管理器
omni_shmem0.1.0FEATOmnigres 共享内存管理
omni_sql0.5.3FEATOmnigres SQL编程组件
omni_sqlite0.2.2FEATOmnigres 嵌入的SQLite支持
omni_test0.4.0FEATOmnigres 测试框架
omni_txn0.5.0FEATOmnigres 事务管理器模块
omni_types0.3.6FEATOmnigres 高级数据类型模块
omni_var0.3.0FEATOmnigres 局部变量模块
omni_vfs0.2.2FEATOmnigres 虚拟文件系统
omni_vfs_types_v10.1.0FEATOmnigres 虚拟文件系统(v1)
omni_web0.3.0FEATOmnigres Web工具箱
omni_worker0.2.1FEATOmnigres 通用Worker池
omni_xml0.1.2FEATOmnigres XML工具包
omni_yaml0.1.0FEATOmnigres YAML工具包
bloom1.0FEATbloom 索引-基于指纹的索引

LANG

扩展版名称版本号分类说明
pg_tle1.5.2LANGAWS 可信语言扩展
plv83.2.4LANGPL/JavaScript (v8) 可信过程程序语言
pljs1.0.5LANGPL/JS 可信过程程序语言
pllua2.0.12LANGLua 程序语言
hstore_pllua2.0.12LANGLua 程序语言的Hstore适配扩展
plluau2.0.12LANGLua 程序语言(不受信任的)
hstore_plluau2.0.12LANGLua 程序语言的Hstore适配扩展(不受信任的)
plprql18.0.1LANG在PostgreSQL使用PRQL——管线式关系查询语言
pldbgapi1.9LANG用于调试 PL/pgSQL 函数的服务器端支持
plpgsql_check2.8.8LANG对 plpgsql 函数进行扩展检查
plprofiler4.2.5LANG剖析 PL/pgSQL 函数
plsh1.20220917LANGPL/sh 程序语言
pljava1.6.10LANGJava 程序语言
plr8.4.8LANG从数据库中加载R语言解释器并执行R脚本
plxslt0.20140221LANGXSLT 存储过程语言
pgtap1.3.4LANGPostgreSQL单元测试框架
faker0.5.3LANG插入生成的测试伪造数据,Python库的包装
dbt20.61.7LANGOSDL-DBT-2 测试组件
pltcl1.0LANGPL/TCL 存储过程语言
pltclu1.0LANGPL/TCL 存储过程语言(未受信/高权限)
plperl1.0LANGPL/Perl 存储过程语言
bool_plperl1.0LANG在 bool 和 plperl 之间转换
hstore_plperl1.0LANG在 hstore 和 plperl 之间转换适配类型
jsonb_plperl1.0LANG在 jsonb 和 plperl 之间转换
plperlu1.0LANGPL/PerlU 存储过程语言(未受信/高权限)
bool_plperlu1.0LANG在 bool 和 plperlu 之间转换
jsonb_plperlu1.0LANG在 jsonb 和 plperlu 之间转换
hstore_plperlu1.0LANG在 hstore 和 plperlu 之间转换适配类型
plpgsql1.0LANGPL/pgSQL 程序设计语言
plpython3u1.0LANGPL/Python3 存储过程语言(未受信/高权限)
jsonb_plpython3u1.0LANG在 jsonb 和 plpython3u 之间转换
ltree_plpython3u1.0LANG在 ltree 和 plpython3u 之间转换
hstore_plpython3u1.0LANG在 hstore 和 plpython3u 之间转换

TYPE

扩展版名称版本号分类说明
prefix1.2.10TYPE前缀树数据类型
semver0.41.0TYPE语义版本号数据类型
unit7.10TYPESI 国标单位扩展
pgpdf0.1.0TYPEPDF数据类型,管理函数与全文检索
pglite_fusion0.0.6TYPE在PG表中嵌入SQLite数据库作为数据类型
md5hash1.0.1TYPE提供128位MD5的原生数据类型
asn1oid1.6TYPEASN1OID数据类型支持
roaringbitmap1.1.0TYPE支持RoaringBitmap数据类型
pgfaceting0.2.0TYPE使用倒排索引的高速切面查询
pg_sphere1.5.2TYPE球面对象函数、运算符与索引支持
country0.0.3TYPE国家代码数据类型,遵循ISO 3166-1标准
pg_xenophile0.8.3TYPEPostgreSQL i8n与l10n工具包
l10n_table_dependent_extension0.8.3TYPEPostgreSQL l10n 工具包
currency0.0.3TYPE使用1字节表示的货币数据类型
collection1.1.1TYPE在PlPGSQL中使用的内存优化高性能集合数据结构
pgmp1.0.5TYPE多精度算术扩展
numeral1.3TYPE数值类型扩展
pg_rational0.0.2TYPE使用BIGINT表示的有理数数据类型
uint1.20250815TYPE无符号整型数据类型
uint1281.2.0TYPE原生128位无符号整型数据类型
hashtypes0.1.5TYPE包括SHA1,MD5在内的多种哈希数据类型
ip4r2.4.2TYPEPostgreSQL 的 IPv4/v6 和 IPv4/v6 范围索引类型
pg_duration1.0.2TYPE用于表示时间段的强化数据类型
uri1.20251029TYPEURI数据类型
emailaddr0TYPEEmail地址数据类型
acl1.0.4TYPEACL数据类型
debversion1.2.0TYPEDebian版本号数据类型
pg_rrule0.3.0TYPE日历重复规则RRULE数据类型
timestamp91.4.0TYPE纳秒分辨率时间戳
chkpass1.0TYPE数据类型:自动加密的密码
isn1.2TYPE用于国际产品编号标准的数据类型
seg1.4TYPE表示线段或浮点间隔的数据类型
cube1.5TYPE用于存储多维立方体的数据类型
ltree1.3TYPE用于表示分层树状结构的数据类型
hstore1.8TYPE用于存储(键,值)对集合的数据类型
citext1.6TYPE提供大小写不敏感的字符串类型
xml21.1TYPEXPath 查询和 XSLT

UTIL

扩展版名称版本号分类说明
gzip1.0.0UTIL使用SQL执行Gzip压缩与解压缩
bzip1.0.0UTILBZIP压缩解压缩函数包
zstd1.1.2UTILZSTD压缩解压缩函数包
http1.7.0UTILHTTP客户端,允许在数据库内收发HTTP请求 (supabase)
pg_net0.20.2UTIL用 SQL 进行异步非阻塞HTTP/HTTPS 请求的扩展 (supabase)
pg_curl2.4.5UTIL封装CURL,执行各种用URL传输数据的操作
pg_retry1.0.0UTIL在临时错误中使用指数退避重试语句
pgjq0.1.0UTIL在Postgres中使用jq查询JSON
pgjwt0.2.0UTILJSON Web Token API 的PG实现 (supabase)
pg_smtp_client0.2.1UTIL使用SMTP从PostgreSQL内发送邮件的客户端扩展
pg_html5_email_address1.2.3UTIL验证Email是否符合HTML5规范的扩展
url_encode1.2.5UTIL提供URL编码解码函数
pgsql_tweaks1.0.2UTIL一些日常会用到的便利函数与视图
pg_extra_time2.0.0UTIL一些关于日期与时间的扩展函数
pgpcre0.20190509UTILPCRE/Perl风格的正则表达式支持
icu_ext1.10.0UTIL访问ICU库提供的函数
pgqr1.0UTIL从数据库中直接生成QR二维码
pg_protobuf1.0UTIL提供Protobuf函数支持
envvar1.0.1UTIL获取环境变量的函数
floatfile1.3.1UTIL将浮点数组存储到文件中而不是堆表中
pg_render0.1.3UTIL使用SQL渲染HTML页面
pg_readme0.7.0UTIL为模式与扩展生成Markdown文档
pg_readme_test_extension0.7.0UTIL为模式与扩展生成Markdown文档
ddl_historization0.0.7UTIL用SQL将所有DDL变更写入到数据库表中
data_historization1.1.0UTIL用SQL将数据变更历史保存到分区表中
schedoc0.0.1UTIL在Django与DBT之间通过注释文档交换元数据
hashlib1.1UTIL稳定哈希函数包
xxhash0.0.1UTILxxhash哈希函数包
shacrypt1.1UTIL实现SHA256-CRYPT与SHA512-CRYPT密钥加密算法
cryptint1.0.0UTIL加密INT与BIGINT类型
pguecc1.0UTILPostgreSQL的uECC绑定,椭圆曲线加解密函数包
sparql1.0UTIL使用SQL查询SPARQL数据源

FUNC

扩展版名称版本号分类说明
pg_idkit0.4.0FUNC生成各式各样的唯一标识符:UUIDv6, ULID, KSUID
pgx_ulid0.2.2FUNCULID数据类型与函数
pg_uuidv71.7.0FUNCUUIDv7 支持
permuteseq1.2.2FUNC伪随机数ID置换生成器
pg_hashids1.3FUNC加盐将整型ID转为短字符串ID
sequential_uuids1.0.3FUNC生成连续生成的UUID
typeid0.3.0FUNCPG原生TypeID类型与函数
topn2.7.0FUNCtop-n JSONB 的类型
quantile1.1.8FUNCQuantile聚合函数
lower_quantile1.0.3FUNCLower Quantile 聚合函数
count_distinct3.0.2FUNCCOUNT(DISTINCT …) 聚合的替代方案
omnisketch1.0.2FUNC实现OmniSketch数据结构,实现近似摘要聚合
ddsketch1.0.1FUNC实现DDSketch数据结构,实现在线的Quantile聚合
vasco0.1.0FUNC使用MIC发现数据中隐含的关联
xicor0.1.0FUNC在PG中计算XI相关系数
weighted_statistics1.0.0FUNC针对稀疏数据的高性能加权统计量计算
tdigest1.4.3FUNCtdigest 聚合函数
first_last_agg0.1.4FUNCfirst() 与 last() 聚合函数
extra_window_functions1.0FUNC额外的窗口函数
floatvec1.1.1FUNC数组类型数学运算扩展
aggs_for_vecs1.4.0FUNC针对数组类型的聚合函数集合扩展
aggs_for_arrays1.3.3FUNC计算数组聚合统计值的函数包
pg_csv1.0.1FUNC灵活的CSV聚合处理函数
arraymath1.1FUNC数组逐元素数学运算符包
pg_math1.1.0FUNC使用GSL库的数学统计函数
random2.0.0FUNC随机数生成器
base361.0.0FUNCBase36编码解码扩展
base620.0.1FUNCBase62编码解码扩展
pg_base580.0.1FUNCBase58 编码/解码函数
financial1.0.1FUNC金融领域聚合函数
convert0.1.0FUNC用于空间里程等的公英制转换函数
refint1.0FUNC实现引用完整性的函数
autoinc1.0FUNC用于自动递增字段的函数
insert_username1.0FUNC用于跟踪谁更改了表的函数
moddatetime1.0FUNC跟踪最后修改时间
tsm_system_time1.0FUNC接受毫秒数限制的 TABLESAMPLE 方法
dict_xsyn1.0FUNC用于扩展同义词处理的文本搜索字典模板
tsm_system_rows1.0FUNC接受行数限制的 TABLESAMPLE 方法
tcn1.0FUNC用触发器通知变更
uuid-ossp1.1FUNC生成通用唯一标识符(UUIDs)
btree_gist1.7FUNC用GiST索引常见数据类型
btree_gin1.3FUNC用GIN索引常见数据类型
intarray1.5FUNC1维整数数组的额外函数、运算符和索引支持
intagg1.1FUNC整数聚合器和枚举器(过时)
dict_int1.0FUNC用于整数的文本搜索字典模板
unaccent1.1FUNC删除重音的文本搜索字典

ADMIN

扩展版名称版本号分类说明
pg_repack1.5.3ADMIN在线垃圾清理与表膨胀治理
pg_rewrite2.0.0ADMIN在线重写整表,不阻塞读写
pg_squeeze1.9.1ADMIN从关系中删除未使用空间
pg_dirtyread2.7ADMIN从表中读取尚未垃圾回收的行
pgfincore1.3.1ADMIN检查和管理操作系统缓冲区缓存
pg_cooldown0.1ADMIN从缓冲区中移除特定关系的页面
ddlx0.30ADMIN提取数据库对象的DDL
pglinter1.1.0ADMINPG数据库规则检查插件
prioritize1.0.4ADMIN获取和设置 PostgreSQL 后端的优先级
pg_checksums1.3ADMIN在离线模式下激活/启用/禁用数据库集群的校验和功能
pg_readonly1.0.4ADMIN将集群设置为只读
pgdd0.6.1ADMIN提供通过标准SQL查询数据库目录集簇的能力
pg_permissions1.4ADMIN查看对象权限并将其与期望状态进行比较
pgautofailover2.2ADMINPG 自动故障迁移
pg_catcheck1.6.0ADMIN用于诊断系统目录是否损坏的工具
pre_prepare0.9ADMIN在服务端预先准备好PreparedStatement备用
pg_upless0.0.3ADMIN检测表上的无用UPDATE
pgcozy1.0ADMIN根据先前的pg_buffercache快照预热内存缓冲区
pg_orphaned1.0ADMIN处理孤儿文件的扩展插件
pg_crash1.0ADMIN向数据库进程随机发送信号模拟故障
pg_cheat_funcs1.0ADMIN一些超级实用的作弊函数
fio1.0ADMINPostgreSQL文件IO函数包
pg_savior0.0.1ADMIN阻止不带条件的全表更新以避免意外事故
safeupdate1.5ADMIN强制在 UPDATE 和 DELETE 时提供 Where 条件
pg_strict1.0.2ADMIN防止不带WHERE条件的危险UPDATE和DELETE操作
pg_drop_events0.1.0ADMIN记录删表删列删视图的事务号,辅助PITR确定时间点
table_log0.6.4ADMIN记录某张表的修改日志并做表/行级时间点恢复
pgagent4.2.3ADMINPostgreSQL任务调度工具,与PGADMIN配合使用
pg_prewarm1.2ADMIN预热关系数据
pgpool_adm4.7.0ADMINPGPool 管理函数
pgpool_recovery4.7.0ADMINPGPool辅助扩展,从v4.3提供的恢复函数
pgpool_regclass4.7.0ADMINPGPool辅助扩展,RegClass替代
lo1.1ADMIN大对象维护
basic_archive-ADMIN归档模块样例
basebackup_to_shell-ADMIN添加一种备份到Shell终端到基础备份方式
old_snapshot1.0ADMIN支持 old_snapshot_threshold 的实用程序
adminpack2.1ADMINPostgreSQL 管理函数集合
amcheck1.4ADMIN校验关系完整性
pg_surgery1.0ADMIN对损坏的关系进行手术

STAT

扩展版名称版本号分类说明
pg_profile4.11STATPostgreSQL 数据库负载记录与AWR报表工具
pg_tracing0.1.3STATPostgreSQL分布式Tracing
pg_show_plans2.1.7STAT打印所有当前正在运行查询的执行计划
pg_stat_kcache2.3.1STAT内核统计信息收集
pg_stat_monitor2.3.1STAT提供查询聚合统计、客户端信息、执行计划详细信息和直方图
pg_qualstats2.1.3STAT收集有关 quals 的统计信息的扩展
pg_store_plans1.9STAT跟踪所有执行的 SQL 语句的计划统计信息
pg_track_settings2.1.2STAT跟踪设置更改
pg_track_optimizer0.9.1STAT跟踪规划器决策与实际执行的差距
pg_wait_sampling1.1.9STAT基于采样的等待事件统计
pgsentinel1.4.0STAT活跃会话历史
system_stats3.2STATPostgreSQL 的系统统计函数
meta0.4.0STAT标准化,更友好的PostgreSQL系统目录视图
pgnodemx1.7STAT使用SQL查询获取操作系统指标
pg_proctab1.7STAT通过SQL接口访问操作系统进程表
pg_sqlog1.6STAT提供访问PostgreSQL日志的SQL接口
bgw_replstatus1.0.8STAT用于汇报本机主从状态的后台工作进程
pgmeminfo1.0.0STAT显示内存使用情况
toastinfo1.5STAT显示TOAST字段的详细信息
explain_ui0.0.2STAT快速跳转至PEV查阅可视化执行计划
pg_relusage0.0.1STAT打印查询引用的表与列
pagevis0.1STAT使用ASCII字符可视化数据库物理页面布局
powa5.1.1STATPostgreSQL 工作负载分析器-核心
pg_overexplain1.0STAT允许 EXPLAIN 转储更多详细
pg_logicalinspect1.0STAT检视逻辑解码组件详情
pageinspect1.12STAT检查数据库页面二进制内容
pgrowlocks1.2STAT显示行级锁信息
sslinfo1.2STAT关于 SSL 证书的信息
pg_buffercache1.5STAT检查共享缓冲区缓存
pg_walinspect1.1STAT用于检查 PostgreSQL WAL 日志内容的函数
pg_freespacemap1.2STAT检查自由空间映射的内容(FSM)
pg_visibility1.2STAT检查可见性图(VM)和页面级可见性信息
pgstattuple1.5STAT显示元组级统计信息
auto_explain-STAT提供一种自动记录执行计划的手段
pg_stat_statements1.11STAT跟踪所有执行的 SQL 语句的计划和执行统计信息

SEC

扩展版名称版本号分类说明
passwordcheck_cracklib3.1.0SEC使用cracklib加固PG用户密码
supautils3.1.0SEC用于在云环境中确保数据库集群的安全
pgsodium3.1.9SEC表数据加密存储 TDE
supabase_vault0.3.1SEC在 Vault 中存储加密凭证的扩展 (supabase)
pg_session_jwt0.4.0SEC使用JWT进行会话认证
anon3.0.1SEC数据匿名化处理工具
pgsmcrypto0.1.1SEC为PostgreSQL提供商密算法支持:SM2,SM3,SM4
pg_enigma0.5.0SECPostgreSQL 加密数据类型
pgaudit18.0SEC提供审计功能
pgauditlogtofile1.7.6SECpgAudit 子扩展,将审计日志写入单独的文件中
pg_auditor0.2SEC审计数据变更并提供闪回能力
logerrors2.1.5SEC用于收集日志文件中消息统计信息的函数
pg_auth_mon3.0SEC监控每个用户的连接尝试
pg_jobmon1.4.1SEC记录和监控函数
credcheck4.5SEC明文凭证检查器
pgcryptokey0.85SECPG密钥管理
pg_pwhash1.0SECPostgreSQL 高级密码哈希扩展(Argon2/scrypt/yescrypt)
login_hook1.7SEC在用户登陆时执行login_hook.login()函数
set_user4.2.0SEC增加了日志记录的 SET ROLE
pg_snakeoil1.4SECPostgreSQL动态链接库反病毒功能
pgextwlist1.19SECPostgreSQL扩展白名单功能
sslutils1.4SEC使用SQL管理SSL证书
noset0.3.0SEC阻止非超级用户使用SET/RESET设置变量
pg_tde1.0SECPercona加密存储引擎
sepgsql-SEC基于SELinux标签的强制访问控制
auth_delay-SEC在返回认证失败前暂停一会,避免爆破
pgcrypto1.3SEC实用加解密函数
passwordcheck-SEC用于强制拒绝修改弱密码的扩展

FDW

扩展版名称版本号分类说明
wrappers0.5.7FDWSupabase提供的外部数据源包装器捆绑包
multicorn3.2FDW用Python编写自定义的外部数据源包装器
odbc_fdw0.5.1FDW访问ODBC可访问的任何外部数据源
jdbc_fdw0.4.0FDW访问JDBC可访问的任何外部数据源
pgspider_ext1.3.0FDW使用多种FDW访问远程数据库服务器
mysql_fdw2.9.3FDWMySQL外部数据包装器
oracle_fdw2.8.0FDW提供对Oracle的外部数据源包装器
tds_fdw2.0.5FDWTDS 数据库(Sybase/SQL Server)外部数据包装器
db2_fdw18.1.1FDW提供对DB2的外部数据源包装器
sqlite_fdw2.5.0FDWSQLite 外部数据包装器
pgbouncer_fdw1.4.0FDW用SQL查询pgbouncer统计信息,并执行pgbouncer命令
etcd_fdw0.0.0FDWetcd分布式键值存储外部数据包装器
informix_fdw0.6.3FDWInformix 外部数据包装器
nominatim_fdw1.1.0FDWNominatim 地理编码接口的 FDW 扩展
mongo_fdw5.5.3FDWMongoDB 外部数据包装器
redis_fdw1.0FDW查询外部Redis数据源
redis0.0.1FDW从PG向Redis发送Pub/Sub消息
kafka_fdw0.0.3FDWKafka外部数据源包装器
hdfs_fdw2.3.3FDWhdfs 外部数据包装器
firebird_fdw1.4.1FDWFirebird外部数据源包装器
aws_s30.0.1FDW从S3导入导出数据的外部数据源包装器
log_fdw1.4FDW访问PostgreSQL日志文件的FDW
dblink1.2FDW从数据库内连接到其他 PostgreSQL 数据库
file_fdw1.0FDW访问外部文件的外部数据包装器
postgres_fdw1.1FDW用于远程 PostgreSQL 服务器的外部数据包装器

SIM

扩展版名称版本号分类说明
documentdb0.109SIM微软DocumentDB的API层
documentdb_core0.109SIM微软DocumentDB的核心API层实现
documentdb_distributed0.109SIMDocumentDB多节点模式的API层
documentdb_extended_rum0.109SIMDocumentDB扩展RUM索引访问方法
orafce4.16.3SIM模拟 Oracle RDBMS 的一部分函数和包的函数和运算符
pgtt4.4SIM类似Oracle的全局临时表功能
session_variable3.4SIMOracle兼容的会话变量/常量操作函数
pg_statement_rollback1.5SIM在服务端提供类似Oracle/DB2的语句级回滚能力
pg_dbms_metadata1.0.0SIM添加 Oracle DBMS_METADATA 兼容性支持的扩展
pg_dbms_lock1.0SIM为PG添加对 Oracle DBMS_LOCK 的完整兼容性支持
pg_dbms_job1.5SIM添加 Oracle DBMS_JOB 兼容性支持的扩展
pg_dbms_errlog2.2SIM模仿 Oracle DBMS_ERRLOG 模块来记录特定表的DML错误
pg_utl_smtp1.0.0SIMOracle UTL_SMTP 兼容扩展(基于 plperlu)
babelfishpg_common3.3.3SIMSQL Server 数据类型兼容扩展
babelfishpg_tsql3.3.1SIMSQL Server SQL语法兼容性扩展
babelfishpg_tds1.0.0SIMSQL Server TDS线缆协议兼容扩展
babelfishpg_money1.1.0SIMSQL Server 货币数据类型兼容扩展
spat0.1.0a4SIM在PG中嵌入Redis风格的内存数据库
pgmemcache2.3.0SIM为PG提供memcached兼容接口

ETL

扩展版名称版本号分类说明
pglogical2.4.6ETLPostgreSQL逻辑复制:三方扩展实现
pglogical_origin2.4.6ETL用于从 Postgres 9.4 升级时的兼容性虚拟扩展
pglogical_ticker1.4.1ETLpglogical复制延迟以秒计的精确视图
pgl_ddl_deploy2.2.1ETL使用 pglogical 执行自动 DDL 部署
pg_failover_slots1.2.0ETL在Failover过程中保留复制槽
db_migrator1.0.0ETL使用FDW从其他DBMS迁移到PostgreSQL
pgactive2.1.7ETLPostgreSQL多主逻辑复制
wal2json2.6ETL用逻辑解码捕获 JSON 格式的 CDC 变更
wal2mongo1.0.7ETL使用逻辑解码捕获MongoDB JSON格式的CDC变更
decoderbufs3.4.0ETL将WAL逻辑解码为ProtocolBuffer协议的消息
decoder_raw1.0ETL逻辑复制解码输出插件:RAW SQL格式
mimeo1.5.1ETL在PostgreSQL实例间进行表级复制
repmgr5.5.0ETLPostgreSQL复制管理组件
pg_fact_loader2.0.1ETL在 Postgres 中构建事实表
pg_bulkload3.1.23ETL向 PostgreSQL 中高速加载数据
test_decoding-ETL基于SQL的WAL逻辑解码样例
pgoutput-ETLPG内置的逻辑解码输出插件

4 - 文件结构

Pigsty 的文件系统结构是如何设计与组织的,以及各个模块使用的目录结构。

Pigsty FHS

Pigsty 的主目录默认放置于 ~/pigsty,该目录下的文件结构如下所示:

#------------------------------------------------------------------------------
# pigsty
#  ^-----@app                    # 额外的示例应用资源
#  ^-----@bin                    # bin 脚本
#  ^-----@docs                   # 文档(可docsify化)
#  ^-----@files                  # ansible 文件资源
#            ^-----@victoria     # Victoria 规则与运维脚本(bin/rules)
#            ^-----@grafana      # grafana 仪表盘
#            ^-----@postgres     # /pg/bin/ 脚本
#            ^-----@migration    # pgsql 迁移任务定义
#            ^-----@pki          # 自签名 CA 和证书
#  ^-----@roles                  # ansible 剧本实现
#  ^-----@templates              # ansible 模板文件
#  ^-----@vagrant                # Vagrant 沙箱虚拟机定义模板
#  ^-----@terraform              # Terraform 云虚拟机申请模板
#  ^-----configure               # 配置向导脚本
#  ^-----ansible.cfg             # ansible 默认配置文件
#  ^-----pigsty.yml              # pigsty 默认配置文件
#  ^-----*.yml                   # ansible 剧本
#------------------------------------------------------------------------------
# /infra -> /data/infra          # infra 运行时目录软链接
# /data/infra                    # root:infra 0771
#  ^-----@metrics                # VictoriaMetrics TSDB 数据
#  ^-----@logs                   # VictoriaLogs 数据
#  ^-----@traces                 # VictoriaTraces 数据
#  ^-----@alertmgr               # AlertManager 数据
#  ^-----@rules                  # 规则定义(含 agent.yml)
#  ^-----@targets                # FileSD 监控目标
#  ^-----@dashboards             # Grafana 仪表盘定义
#  ^-----@datasources            # Grafana 数据源定义
#  ^-----prometheus.yml          # Victoria 的 Prometheus 兼容配置
#------------------------------------------------------------------------------

CA FHS

Pigsty 的 自签名 CA 位于 Pigsty 主目录下的 files/pki/

你必须妥善保管 CA 的密钥文件files/pki/ca/ca.key,该密钥是在 deploy.ymlinfra.ymlca 角色负责生成的。

# pigsty/files/pki                           # (local_user) 0755
#  ^-----@ca                                 # (local_user) 0700
#         ^-----@ca.key                      # 0600,非常重要:保守其秘密
#         ^-----@ca.crt                      # 0644,非常重要:在所有地方都受信任
#  ^-----@csr                                # (local_user) 0755,签名请求 csr
#  ^-----@misc                               # (local_user) 0755,杂项证书,已签发证书
#  ^-----@etcd                               # (local_user) 0755,etcd 服务器证书
#  ^-----@minio                              # (local_user) 0755,minio 服务器证书
#  ^-----@nginx                              # (local_user) 0755,nginx SSL 证书
#  ^-----@infra                              # (local_user) 0755,infra 客户端证书
#  ^-----@pgsql                              # (local_user) 0755,pgsql 服务器证书
#  ^-----@mongo                              # (local_user) 0755,mongodb/ferretdb 服务器证书
#  ^-----@mysql                              # (local_user) 0755,mysql 服务器证书(占位符)

被 Pigsty 所管理的节点将安装以下证书文件:

/etc/pki/ca.crt                             # root:root 0644,所有节点都添加的根证书
/etc/pki/ca-trust/source/anchors/ca.crt     # 软链接到系统受信任的锚点

所有 infra 节点都会有以下证书:

/etc/pki/infra.crt                          # root:infra 0644,infra 节点证书
/etc/pki/infra.key                          # root:infra 0640,infra 节点密钥

当您的管理节点出现故障时,files/pki 目录与 pigsty.yml 文件应当在备份的管理节点上可用。你可以用 rsync 做到这一点。

# run on meta-1, rsync to meta2
cd ~/pigsty;
rsync -avz ./ meta-2:~/pigsty  

INFRA FHS

infra 角色会创建 infra_data(默认 /data/infra)并建立 /infra -> /data/infra 软链接。/data/infra 的权限为 root:infra 0771,子目录默认权限为 *:infra 0750,覆盖项如下:

# /infra -> /data/infra
# /data/infra                              # root:infra 0771
#  ^-----@pgadmin                          # 5050:5050 0700
#  ^-----@alertmgr                         # prometheus:infra 0700
#  ^-----@conf                             # root:infra 0750
#            ^-----patronictl.yml          # root:admin 0640
#  ^-----@tmp                              # root:infra 0750
#  ^-----@hosts                            # dnsmasq:dnsmasq 0755(DNS 记录)
#            ^-----default                 # root:root 0644
#  ^-----@datasources                      # root:infra 0750
#            ^-----*.json                  # 0600(register 生成)
#  ^-----@dashboards                       # grafana:infra 0750
#  ^-----@metrics                          # victoria:infra 0750
#  ^-----@logs                             # victoria:infra 0750
#  ^-----@traces                           # victoria:infra 0750
#  ^-----@bin                              # victoria:infra 0750
#            ^-----check|new|reload|status # root:infra 0755
#  ^-----@rules                            # victoria:infra 0750
#            ^-----agent.yml               # victoria:infra 0644
#            ^-----infra.yml               # victoria:infra 0644
#            ^-----node.yml                # victoria:infra 0644
#            ^-----pgsql.yml               # victoria:infra 0644
#            ^-----redis.yml               # victoria:infra 0644
#            ^-----etcd.yml                # victoria:infra 0644
#            ^-----minio.yml               # victoria:infra 0644
#            ^-----kafka.yml               # victoria:infra 0644
#            ^-----mysql.yml               # victoria:infra 0644
#  ^-----@targets                          # victoria:infra 0750
#            ^-----@infra                  # infra 组件目标(文件 0640)
#            ^-----@node                   # 节点目标(文件 0640)
#            ^-----@ping                   # ping 目标(文件 0640)
#            ^-----@etcd                   # etcd 目标(文件 0640)
#            ^-----@pgsql                  # pgsql 目标(文件 0640)
#            ^-----@pgrds                  # pgrds 目标(文件 0640)
#            ^-----@redis                  # redis 目标(文件 0640)
#            ^-----@minio                  # minio 目标(文件 0640)
#            ^-----@mongo                  # mongo 目标(文件 0640)
#            ^-----@juice                  # juicefs 目标(文件 0640)
#            ^-----@mysql                  # mysql 目标(文件 0640)
#            ^-----@kafka                  # kafka 目标(文件 0640)
#            ^-----@docker                 # docker 目标(文件 0640)
#            ^-----@patroni                # patroni SSL 目标(文件 0640)
#  ^-----prometheus.yml                    # victoria:infra 0644

上述结构由以下实现生成:roles/infra/tasks/dir.ymlroles/infra/tasks/victoria.ymlroles/infra/tasks/register.ymlroles/infra/tasks/dns.ymlroles/infra/tasks/env.yml


NODE FHS

节点的数据目录由参数 node_data 指定,默认为 /data,由 root:root 持有,权限为 0755

每个组件的默认数据目录都位于这个数据库目录下,如下所示:

/data                                 # root:root 0755
#  ^-----@postgres                    # postgres:postgres 0700(默认 pg_fs_main)
#  ^-----@backups                     # postgres:postgres 0700(默认 pg_fs_backup)
#  ^-----@redis                       # redis:redis 0700(多实例共用)
#  ^-----@minio                       # minio:minio 0750(单机单盘模式)
#  ^-----@etcd                        # etcd:etcd 0700(etcd_data)
#  ^-----@infra                       # root:infra 0771(infra 模块数据目录)
#  ^-----@docker                      # root:root 0755(Docker 数据目录)
#  ^-----@...                         # 其他组件的数据目录

Victoria FHS

监控配置已经从旧的 /etc/prometheus 目录布局迁移为 /infra 运行时布局。主配置模板位于 roles/infra/templates/victoria/prometheus.yml,渲染结果为 /infra/prometheus.yml

files/victoria/bin/*files/victoria/rules/* 会被同步到 /infra/bin//infra/rules/,各模块再向 /infra/targets/* 注册 FileSD 目标。

# /infra
#  ^-----prometheus.yml              # Victoria 主配置(Prometheus 兼容格式)0644
#  ^-----@bin                        # 工具脚本(check/new/reload/status)0755
#  ^-----@rules                      # 记录与告警规则(*.yml 0644)
#            ^-----agent.yml         # Agent 预聚合规则
#            ^-----infra.yml         # infra 规则和告警
#            ^-----etcd.yml          # etcd 规则和告警
#            ^-----node.yml          # node 规则和告警
#            ^-----pgsql.yml         # pgsql 规则和告警
#            ^-----redis.yml         # redis 规则和告警
#            ^-----minio.yml         # minio 规则和告警
#            ^-----kafka.yml         # kafka 规则和告警
#            ^-----mysql.yml         # mysql 规则和告警
#  ^-----@targets                    # FileSD 服务发现目标(*.yml 0640)
#            ^-----@infra            # infra 静态目标
#            ^-----@node             # node 静态目标
#            ^-----@pgsql            # pgsql 静态目标
#            ^-----@pgrds            # pgsql 远程 RDS 目标
#            ^-----@redis            # redis 静态目标
#            ^-----@minio            # minio 静态目标
#            ^-----@mongo            # mongo 静态目标
#            ^-----@mysql            # mysql 静态目标
#            ^-----@etcd             # etcd 静态目标
#            ^-----@ping             # ping 静态目标
#            ^-----@kafka            # kafka 静态目标
#            ^-----@juice            # juicefs 静态目标
#            ^-----@docker           # docker 静态目标
#            ^-----@patroni          # patroni 静态目标(启用 SSL 时)
# /etc/default/vmetrics              # vmetrics 启动参数(victoria:infra 0644)
# /etc/default/vlogs                 # vlogs 启动参数(victoria:infra 0644)
# /etc/default/vtraces               # vtraces 启动参数(victoria:infra 0644)
# /etc/default/vmalert               # vmalert 启动参数(victoria:infra 0644)
# /etc/alertmanager.yml              # 告警组件主配置(prometheus:infra 0644)
# /etc/default/alertmanager          # 告警组件环境变量(prometheus:infra 0640)
# /etc/blackbox.yml                  # 黑盒探测主配置(prometheus:infra 0644)
# /etc/default/blackbox_exporter     # 黑盒探测环境变量(prometheus:infra 0644)

Postgres FHS

以下参数与PostgreSQL数据库目录结构相关:

  • pg_dbsu_home: Postgres 默认用户的家目录,默认为/var/lib/pgsql
  • pg_bin_dir: Postgres二进制目录,默认为/usr/pgsql/bin/
  • pg_data:Postgres数据库目录,默认为/pg/data
  • pg_fs_main:Postgres主数据目录,默认为/data/postgres
  • pg_fs_backup:Postgres 备份盘挂载点,默认为 /data/backups(可选,也可以选择备份到主数据盘上的子目录)
  • pg_cluster_dir:派生变量,{{ pg_fs_main }}/{{ pg_cluster }}-{{ pg_version }}
  • pg_backup_dir:派生变量,{{ pg_fs_backup }}/{{ pg_cluster }}-{{ pg_version }}
#--------------------------------------------------------------#
# 工作假设:
#   {{ pg_fs_main   }} 主数据目录,默认位置:`/data/postgres` [SSD]
#   {{ pg_fs_backup }} 备份数据盘,默认位置:`/data/backups`  [HDD]
#--------------------------------------------------------------#
# 默认配置(pg_cluster=pg-test, pg_version=18):
#     pg_fs_main = /data/postgres      高速SSD
#     pg_fs_backup = /data/backups     廉价HDD (可选)
#
#     /pg        -> /data/postgres/pg-test-18
#     /pg/data   -> /data/postgres/pg-test-18/data
#     /pg/backup -> /data/backups/pg-test-18/backup
#--------------------------------------------------------------#
- name: create pgsql directories
  tags: pg_dir
  become: true
  block:

    - name: create pgsql directories
      file: path={{ item.path }} state=directory owner={{ item.owner|default(pg_dbsu) }} group={{ item.group|default('postgres') }} mode={{ item.mode }}
      with_items:
        - { path: "{{ pg_fs_main }}"            ,mode: "0700" }
        - { path: "{{ pg_fs_backup }}"          ,mode: "0700" }
        - { path: "{{ pg_cluster_dir }}"        ,mode: "0700" }
        - { path: "{{ pg_cluster_dir }}/bin"    ,mode: "0700" }
        - { path: "{{ pg_cluster_dir }}/log"    ,mode: "0750" }
        - { path: "{{ pg_cluster_dir }}/tmp"    ,mode: "0700" }
        - { path: "{{ pg_cluster_dir }}/cert"   ,mode: "0700" }
        - { path: "{{ pg_cluster_dir }}/conf"   ,mode: "0700" }
        - { path: "{{ pg_cluster_dir }}/data"   ,mode: "0700" }
        - { path: "{{ pg_cluster_dir }}/spool"  ,mode: "0700" }
        - { path: "{{ pg_backup_dir }}/backup"  ,mode: "0700" }
        - { path: "/var/run/postgresql"         ,owner: root, group: root, mode: "0755" }

    - name: link pgsql directories
      file: src={{ item.src }} dest={{ item.dest }} state=link
      with_items:
        - { src: "{{ pg_backup_dir }}/backup" ,dest: "{{ pg_cluster_dir }}/backup" }
        - { src: "{{ pg_cluster_dir }}"       ,dest: "/pg" }

数据文件结构

# 真实目录
{{ pg_fs_main }}     /data/postgres                    # postgres:postgres 0700,主数据目录
{{ pg_cluster_dir }} /data/postgres/pg-test-18         # postgres:postgres 0700,集群目录
                     /data/postgres/pg-test-18/bin     # postgres:postgres 0700(脚本文件 root:postgres 0755)
                     /data/postgres/pg-test-18/log     # postgres:postgres 0750,日志目录
                     /data/postgres/pg-test-18/tmp     # postgres:postgres 0700,临时文件
                     /data/postgres/pg-test-18/cert    # postgres:postgres 0700,证书
                     /data/postgres/pg-test-18/conf    # postgres:postgres 0700,配置索引
                     /data/postgres/pg-test-18/data    # postgres:postgres 0700,主数据目录
                     /data/postgres/pg-test-18/spool   # postgres:postgres 0700,pgBackRest spool
                     /data/postgres/pg-test-18/backup  # -> /data/backups/pg-test-18/backup

{{ pg_fs_backup  }}  /data/backups                     # postgres:postgres 0700,可选备份盘目录/挂载点
{{ pg_backup_dir }}  /data/backups/pg-test-18          # postgres:postgres 0700,集群备份目录
                     /data/backups/pg-test-18/backup   # postgres:postgres 0700,实际备份位置

# 软链接
/pg             ->   /data/postgres/pg-test-18         # pg 根软链接
/pg/data        ->   /data/postgres/pg-test-18/data    # pg 数据目录
/pg/backup      ->   /data/backups/pg-test-18/backup   # pg 备份目录

二进制文件结构

在 EL 兼容发行版上(使用yum),PostgreSQL 默认安装位置为

/usr/pgsql-${pg_version}/

Pigsty 会创建一个名为 /usr/pgsql 的软连接,指向由 pg_version 参数指定的实际版本,例如

/usr/pgsql -> /usr/pgsql-18

因此,默认的 pg_bin_dir/usr/pgsql/bin/,而该路径会被添加至系统的 PATH 环境变量中,定义文件为:/etc/profile.d/pgsql.sh.

export PATH="/usr/pgsql/bin:/pg/bin:$PATH"
export PGHOME=/usr/pgsql
export PGDATA=/pg/data

在 Ubuntu/Debian 上,PostgreSQL Deb 包的默认安装位置是:

/usr/lib/postgresql/${pg_version}/bin

Pgbouncer FHS

Pgbouncer 使用与 {{ pg_dbsu }}(默认为 postgres)相同的用户运行,配置文件位于/etc/pgbouncer

  • pgbouncer.ini:连接池主配置文件(postgres:postgres 0640
  • database.txt:定义连接池中的数据库(postgres:postgres 0600
  • useropts.txt:业务用户连接参数(postgres:postgres 0600
  • userlist.txt:由 /pg/bin/pgb-user 维护的用户密码文件
  • pgb_hba.conf:连接池访问控制文件(postgres:postgres 0600
/etc/pgbouncer/                # postgres:postgres 0750
/etc/pgbouncer/pgbouncer.ini   # postgres:postgres 0640
/etc/pgbouncer/database.txt    # postgres:postgres 0600
/etc/pgbouncer/useropts.txt    # postgres:postgres 0600
/etc/pgbouncer/userlist.txt    # postgres:postgres (由 pgb-user 维护)
/etc/pgbouncer/pgb_hba.conf    # postgres:postgres 0600
/pg/log/pgbouncer              # postgres:postgres 0750
/var/run/postgresql            # {{ pg_dbsu }}:postgres 0755(tmpfiles 维护)

Redis FHS

Pigsty 提供了对 Redis 部署与监控的基础支持。

Redis 二进制通常由系统包管理器安装(服务调用路径为 /bin/*,在多数发行版上由 /usr/bin/* 软链接兼容):

redis-server    
redis-cli       
redis-sentinel  
redis-check-rdb 
redis-check-aof 
redis-benchmark 
/usr/libexec/redis-shutdown

对于一个名为 redis-test-1-6379 的 Redis 实例,与其相关的资源如下所示:

/usr/lib/systemd/system/redis-test-1-6379.service     # root:root 0644(Debian系为 /lib/systemd/system)
/etc/redis/                                           # redis:redis 0700
/etc/redis/redis-test-1-6379.conf                     # redis:redis 0700
/data/redis/                                          # redis:redis 0700
/data/redis/redis-test-1-6379                         # redis:redis 0700
/data/redis/redis-test-1-6379/redis-test-1-6379.rdb   # RDB 文件
/data/redis/redis-test-1-6379/redis-test-1-6379.aof   # AOF 文件
/var/log/redis/                                       # redis:redis 0700
/var/log/redis/redis-test-1-6379.log                  # 日志
/var/run/redis/                                       # redis:redis 0700(开机 tmpfiles 为 0755)
/var/run/redis/redis-test-1-6379.pid                  # PID

对于 Ubuntu / Debian 而言,systemd 服务的默认目录不是 /usr/lib/systemd/system/ 而是 /lib/systemd/system/

5 - 参数列表

Pigsty v4.x 配置参数总览与模块参数导航

本文是 Pigsty v4.x 的参数导航页,不重复展开每个参数的详细解释。 参数细节请进入各模块的 param 页面查看。

按照当前文档口径,正式模块合计约 360 个参数,分布在 10 个模块中。


模块参数导航

模块参数组参数量说明
PGSQL9125PostgreSQL 高可用集群配置
INFRA1072软件仓库与 Victoria 可观测基础设施
NODE1173节点初始化、系统调优与运维基线
ETCD213ETCD 集群与移除保护参数
MINIO221MinIO 部署与移除参数
REDIS221Redis 部署与移除参数
FERRET19FerretDB(Mongo API)参数
DOCKER18Docker 引擎参数
JUICE12JuiceFS 实例与缓存参数
VIBE116Code/Jupyter/Node.js/Claude 配置

参数组速览

模块主要参数组
PGSQLPG_IDPG_BUSINESSPG_INSTALLPG_BOOTSTRAPPG_PROVISIONPG_BACKUPPG_ACCESSPG_MONITORPG_REMOVE
INFRAMETACAINFRA_IDREPOINFRA_PACKAGENGINXDNSVICTORIAPROMETHEUSGRAFANA
NODENODE_IDNODE_DNSNODE_PACKAGENODE_TUNENODE_SECNODE_ADMINNODE_TIMENODE_VIP
HAPROXYNODE_EXPORTERVECTOR
ETCDETCDETCD_REMOVE
MINIOMINIOMINIO_REMOVE
REDISREDISREDIS_REMOVE
FERRETFERRET
DOCKERDOCKER
JUICEJUICE
VIBEVIBE

使用建议

  • 首次部署优先阅读:NODEINFRAPGSQL
  • 生产环境务必审查:*_safeguard、密码凭据、端口与网络暴露参数
  • 变更前先在单集群小范围验证,再扩展到全局参数

6 - 剧本列表

Pigsty v4.x 预置 Ansible 剧本导航与执行要点

本文汇总 Pigsty v4.x 各模块剧本入口与执行要点,详细任务标签请进入对应模块 playbook 文档。

模块剧本导航

模块数量剧本
INFRA3deploy.yml infra.yml infra-rm.yml
NODE2node.yml node-rm.yml
ETCD2etcd.yml etcd-rm.yml
PGSQL7pgsql.yml pgsql-rm.yml
pgsql-user.yml pgsql-db.yml
pgsql-monitor.yml pgsql-migration.yml pgsql-pitr.yml
REDIS2redis.yml redis-rm.yml
MINIO2minio.yml minio-rm.yml
FERRET1mongo.yml
DOCKER1docker.yml
JUICE1juice.yml
VIBE1vibe.yml

剧本总表

剧本模块主要用途
deploy.ymlINFRA一次性部署核心链路(Infra/Node/Etcd/PGSQL,按配置启用 MinIO)
infra.ymlINFRA初始化基础设施节点
infra-rm.ymlINFRA移除基础设施组件
node.ymlNODE节点纳管与基线配置
node-rm.ymlNODE节点去纳管
etcd.ymlETCDETCD 安装/扩容
etcd-rm.ymlETCDETCD 移除/缩容
pgsql.ymlPGSQL初始化 PostgreSQL 集群或新增实例
pgsql-rm.ymlPGSQL移除 PostgreSQL 集群/实例
pgsql-user.ymlPGSQL增加业务用户
pgsql-db.ymlPGSQL增加业务数据库
pgsql-monitor.ymlPGSQL纳管远程 PostgreSQL 监控
pgsql-migration.ymlPGSQL生成迁移手册与脚本
pgsql-pitr.ymlPGSQL时间点恢复(PITR)
redis.ymlREDISRedis 部署
redis-rm.ymlREDISRedis 移除
minio.ymlMINIOMinIO 部署
minio-rm.ymlMINIOMinIO 移除
mongo.ymlFERRETFerretDB(Mongo API)部署
docker.ymlDOCKERDocker 引擎部署
juice.ymlJUICEJuiceFS 实例部署/移除
vibe.ymlVIBEVIBE 开发环境部署

辅助剧本

以下剧本不归属于特定模块,提供一些辅助功能。

剧本说明
cache.yml构建离线安装包缓存
cert.yml使用 Pigsty CA 签发证书
app.yml使用 Docker Compose 安装应用模板
slim.yml最小化组件安装场景

剧本使用注意事项

保护机制

多个模块提供了防误删保险,通过 *_safeguard 参数控制:

默认情况下,这些 safeguard 参数均未启用(未定义)。建议在生产环境中为已初始化的集群显式设置为 true

当保护开关设置为 true 时,对应的 *-rm.yml 剧本会立即中止执行,防止误删。可以通过命令行参数强制覆盖:

./pgsql-rm.yml -l pg-test -e pg_safeguard=false
./etcd-rm.yml  -l etcd    -e etcd_safeguard=false
./minio-rm.yml -l minio   -e minio_safeguard=false

限制执行范围

执行剧本时建议使用 -l 参数限制命令执行的对象范围:

./pgsql.yml -l pg-meta            # 限制在集群 pg-meta 上执行
./node.yml -l 10.10.10.10         # 限制在特定节点上执行
./redis.yml -l redis-test         # 限制在 redis-test 集群上执行

在大规模部署上批量执行时,建议先在单集群灰度验证,再分批执行到全局。

幂等性

大部分剧本都是幂等的,可以重复执行。但需要注意:

  • infra.yml 默认不会清除数据,可安全重复执行。所有 clean 参数(vmetrics_cleanvlogs_cleanvtraces_cleangrafana_cleannginx_clean)默认均为 false
  • 如需清除基础设施数据重建,需显式设置对应的 clean 参数为 true
  • 重复执行 *-rm.yml 删除剧本需格外小心,确保在正确的目标上执行

任务标签

可以使用 -t 参数只执行特定的任务子集:

./pgsql.yml -l pg-test -t pg_service    # 只刷新集群 pg-test 的服务
./node.yml -t haproxy                   # 只在节点上设置 haproxy
./etcd.yml -t etcd_launch               # 只重启 etcd 服务

常用命令速查

INFRA 模块

./deploy.yml                     # 一次性完整部署 Pigsty
./infra.yml                      # 初始化基础设施
./infra-rm.yml                   # 移除基础设施
./cache.yml                      # 从现有仓库创建离线安装包
./cert.yml -e cn=<name>          # 签发客户端证书

NODE 模块

./node.yml -l <cls|ip>           # 添加节点
./node-rm.yml -l <cls|ip>        # 移除节点
bin/node-add <cls|ip>            # 添加节点 (包装脚本)
bin/node-rm <cls|ip>             # 移除节点 (包装脚本)

ETCD 模块

./etcd.yml                       # 初始化 etcd 集群
./etcd-rm.yml                    # 移除 etcd 集群
bin/etcd-add <ip>                # 添加 etcd 成员 (包装脚本)
bin/etcd-rm <ip>                 # 移除 etcd 成员 (包装脚本)

PGSQL 模块

./pgsql.yml -l <cls>             # 初始化 PostgreSQL 集群
./pgsql-rm.yml -l <cls>          # 移除 PostgreSQL 集群
./pgsql-user.yml -l <cls> -e username=<user>   # 创建业务用户
./pgsql-db.yml -l <cls> -e dbname=<db>         # 创建业务数据库
./pgsql-monitor.yml -e clsname=<cls>           # 监控远程集群
./pgsql-migration.yml -e@files/migration/<cls>.yml  # 生成迁移手册
./pgsql-pitr.yml -l <cls> -e '{"pg_pitr": {}}'      # 执行 PITR 恢复

bin/pgsql-add <cls>              # 初始化集群 (包装脚本)
bin/pgsql-rm <cls>               # 移除集群 (包装脚本)
bin/pgsql-user <cls> <user>      # 创建用户 (包装脚本)
bin/pgsql-db <cls> <db>          # 创建数据库 (包装脚本)
bin/pgsql-svc <cls>              # 刷新服务 (包装脚本)
bin/pgsql-hba <cls>              # 重载 HBA (包装脚本)
bin/pgmon-add <cls>              # 监控远程集群 (包装脚本)

REDIS 模块

./redis.yml -l <cls>             # 初始化 Redis 集群
./redis-rm.yml -l <cls>          # 移除 Redis 集群

MINIO 模块

./minio.yml -l <cls>             # 初始化 MinIO 集群
./minio-rm.yml -l <cls>          # 移除 MinIO 集群

FERRET 模块

./mongo.yml -l ferret            # 安装 FerretDB

DOCKER 模块

./docker.yml -l <host>           # 安装 Docker
./app.yml -e app=<name>          # 部署 Docker Compose 应用

7 - 端口列表

Pigsty 中各个组件使用的端口一览,以及相关的配置参数与组件状态。

以下为 Pigsty 中各模块组件使用的默认端口及其对应参数,您可以按需调整,或者作为内部防火墙精细配置的参考。

模块组件端口参数状态
NODEnode_exporter9100node_exporter_port✅ 默认启用
NODEhaproxy9101haproxy_exporter_port✅ 默认启用
NODEvector9598vector_port✅ 默认启用
NODEkeepalived_exporter9650vip_exporter_port⚠️ 按需启用
NODEchronyd123-✅ 默认启用
DOCKERdocker9323docker_exporter_port⚠️ 按需启用
INFRAnginx80nginx_port✅ 默认启用
INFRAnginx443nginx_ssl_port✅ 默认启用
INFRAnginx_exporter9113nginx_exporter_port✅ 默认启用
INFRAgrafana3000grafana_port✅ 默认启用
INFRAvictoriaMetrics8428vmetrics_port✅ 默认启用
INFRAvictoriaLogs9428vlogs_port✅ 默认启用
INFRAvictoriaTraces10428vtraces_port✅ 默认启用
INFRAvmalert8880vmalert_port✅ 默认启用
INFRAalertmanager9059alertmanager_port✅ 默认启用
INFRAblackbox_exporter9115blackbox_port✅ 默认启用
INFRAdnsmasq53dns_port✅ 默认启用
ETCDetcd2379etcd_port✅ 默认启用
ETCDetcd2380etcd_peer_port✅ 默认启用
MINIOminio9000minio_port✅ 默认启用
MINIOminio9001minio_admin_port✅ 默认启用
REDISredis6379redis_instances⚠️ 按需启用
REDISredis_exporter9121redis_exporter_port⚠️ 按需启用
FERRETferretdb27017mongo_port⚠️ 按需启用
FERRETferretdb (TLS)27018mongo_ssl_port⚠️ 按需启用
FERRETmongo_exporter9216mongo_exporter_port✅ 默认启用
VIBEcode-server8443code_port⚠️ 按需启用
VIBEjupyterlab8888jupyter_port⚠️ 按需启用
PGSQLpostgres5432pg_port✅ 默认启用
PGSQLpgbouncer6432pgbouncer_port✅ 默认启用
PGSQLpatroni8008patroni_port✅ 默认启用
PGSQLpg_exporter9630pg_exporter_port✅ 默认启用
PGSQLpgbouncer_exporter9631pgbouncer_exporter_port✅ 默认启用
PGSQLpgbackrest_exporter9854pgbackrest_exporter_port✅ 默认启用
PGSQL{{ pg_cluster }}-primary5433pg_default_services✅ 默认启用
PGSQL{{ pg_cluster }}-replica5434pg_default_services✅ 默认启用
PGSQL{{ pg_cluster }}-default5436pg_default_services✅ 默认启用
PGSQL{{ pg_cluster }}-offline5438pg_default_services✅ 默认启用
PGSQL{{ pg_cluster }}-<service>543xpg_services⚠️ 按需启用

公网开放端口建议

如果您使用防火墙 zone 模式,建议通过 node_firewall_public_port 仅开放最小必要端口:

  • 最小管理面:22, 80, 443(推荐)
  • 需要公网直连数据库:额外开放 5432

不建议直接对公网开放:etcd2379/2380)、patroni8008)、各类 exporter(9xxx)、minio9000/9001)、redis6379)、ferretdb27017/27018)等内部组件端口。

node_firewall_mode: zone
node_firewall_public_port: [22, 80, 443]
# node_firewall_public_port: [22, 80, 443, 5432]  # only if public DB access is required