这是本节的多页打印视图。
点击此处打印.
返回本页常规视图.
扩展插件
利用 PostgreSQL 扩展的协同超能力
Pigsty 提供 440+ 扩展,覆盖时序、地理、向量、全文检索、分析、特性增强等 16 大类别,开箱即用。
在 Pigsty 中使用扩展涉及四个核心步骤:下载、安装、配置/加载 与 启用。
pg-meta:
hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
vars:
pg_cluster: pg-meta
pg_databases:
- name: meta
extensions: [ postgis, timescaledb, vector ] # 启用:在数据库中创建扩展
pg_libs: 'timescaledb, pg_stat_statements, auto_explain' # 配置:预加载扩展库
pg_extensions: [ postgis, timescaledb, pgvector ] # 安装:安装扩展软件包

1 - 快速开始
使用扩展的四步流程速览
在 Pigsty 中使用扩展需要四个步骤:下载、安装、配置、启用。
- 下载:将扩展软件包下载到本地仓库(Pigsty 默认已下载主流扩展)
- 安装:在集群节点上安装扩展软件包
- 配置:部分扩展需要预加载或配置参数
- 启用:在数据库中执行
CREATE EXTENSION 创建扩展
声明式配置
在 Pigsty 配置清单中声明扩展,集群初始化时自动完成安装与启用:
pg-meta:
hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
vars:
pg_cluster: pg-meta
pg_databases:
- name: meta
extensions: [ postgis, timescaledb, vector ] # 在数据库中启用扩展
pg_libs: 'timescaledb, pg_stat_statements, auto_explain' # 预加载扩展库
pg_extensions: [ postgis, timescaledb, pgvector ] # 安装扩展软件包
执行 ./pgsql.yml 初始化集群后,postgis、timescaledb、vector 三个扩展即在 meta 数据库中可用。
命令式操作
对于已有集群,可以使用命令行方式添加扩展:
# 1. 安装扩展软件包
./pgsql.yml -l pg-meta -t pg_extension -e '{"pg_extensions":["pgvector"]}'
# 2. 预加载扩展(如需要,修改后需重启)
pg edit-config pg-meta --force -p shared_preload_libraries='timescaledb, pg_stat_statements, auto_explain'
# 3. 在数据库中启用扩展
psql -d meta -c 'CREATE EXTENSION vector;'
也可以使用 pig 包管理器直接安装:
pig install pgvector # 安装扩展包
pig extension create vector # 在数据库中启用
流程速查
详细说明请参阅各子章节:下载、安装、配置、启用
2 - 扩展简介
PostgreSQL 扩展的核心概念与 Pigsty 扩展生态
扩展是 PostgreSQL 的灵魂所在。Pigsty 收录了 440+ 个预编译、开箱即用的扩展插件,充分释放 PostgreSQL 的潜能。
扩展是什么
PostgreSQL 扩展(Extension)是一种模块化机制,允许在不修改核心代码的情况下增强数据库功能。
一个扩展通常包含三部分:
- 控制文件(
.control):必需,包含扩展元数据 - SQL 脚本(
.sql):可选,定义函数、类型、操作符等数据库对象 - 动态库(
.so):可选,提供 C 语言实现的高性能功能
扩展可以为 PostgreSQL 添加:新数据类型、索引方法、函数与操作符、外部数据访问、过程语言、性能监控、安全审计等能力。
核心扩展
Pigsty 收录的扩展中,以下是最具代表性的:
绝大多数扩展可以并存甚至组合使用,产生 1+1 远大于 2 的协同效应。
扩展类别
Pigsty 将扩展划分为 16 个类别:
| 类别 | 别名 | 说明 | 典型扩展 |
|---|
| 时序 | time | 时序数据处理 | timescaledb, pg_cron, periods |
| 地理 | gis | 地理空间数据 | postgis, h3, pgrouting |
| 向量 | rag | 向量检索与 AI | pgvector, vchord, pg_vectorize |
| 搜索 | fts | 全文检索 | pgroonga, zhparser, pg_bigm |
| 分析 | olap | OLAP 与分析 | pg_duckdb, pg_mooncake, citus |
| 特性 | feat | 功能增强 | age, pg_graphql, hll, rum |
| 语言 | lang | 过程语言 | plpython3u, pljava, plv8 |
| 类型 | type | 数据类型 | hstore, ltree, ip4r |
| 工具 | util | 实用工具 | http, pg_net, pgjwt |
| 函数 | func | 函数库 | pg_uuidv7, topn, tdigest |
| 管理 | admin | 运维管理 | pg_repack, pg_squeeze, pgagent |
| 统计 | stat | 监控统计 | pg_stat_statements, pg_qualstats, auto_explain |
| 安全 | sec | 安全审计 | pgaudit, pgsodium, pg_tde |
| 外联 | fdw | 外部数据访问 | postgres_fdw, mysql_fdw, oracle_fdw |
| 兼容 | sim | 数据库兼容 | orafce, babelfish |
| 同步 | etl | 数据同步 | pglogical, wal2json, decoderbufs |
使用类别别名可以批量安装整个类别的扩展,例如 pg_extensions: [ pgsql-gis, pgsql-rag ]。
预定义扩展集
Pigsty 提供了若干预定义的扩展集(Stack),方便按场景选用:
| 扩展集 | 包含扩展 |
|---|
gis-stack | postgis, pgrouting, pointcloud, h3, q3c, ogr_fdw |
rag-stack | pgvector, vchord, pgvectorscale, pg_similarity, pg_tiktoken |
fts-stack | pgroonga, pg_bigm, zhparser, hunspell |
olap-stack | pg_duckdb, pg_mooncake, timescaledb, pg_partman, plproxy |
feat-stack | age, hll, rum, pg_graphql, pg_jsonschema, jsquery |
stat-stack | pg_show_plans, pg_stat_kcache, pg_qualstats, pg_wait_sampling |
supa-stack | pg_graphql, pg_jsonschema, wrappers, pgvector, pgsodium, vault |
在 pg_extensions 中直接使用这些名称即可安装整套扩展。
扩展资源
3 - 软件包
扩展包别名与类别命名规则
Pigsty 使用包别名机制简化扩展的安装与管理。
包别名机制
管理扩展涉及多个层面的名称映射:
| 层面 | 示例 pgvector | 示例 postgis |
|---|
| 扩展名 | vector | postgis, postgis_topology, … |
| 包别名 | pgvector | postgis |
| RPM 包名 | pgvector_18 | postgis36_18* |
| DEB 包名 | postgresql-18-pgvector | postgresql-18-postgis-3* |
Pigsty 提供包别名抽象层,让用户无需关心具体的 RPM/DEB 包名:
pg_extensions: [ pgvector, postgis, timescaledb ] # 使用包别名
Pigsty 会根据操作系统和 PostgreSQL 版本自动翻译为正确的包名。
注意:CREATE EXTENSION 时使用的是扩展名(如 vector),而非包别名(pgvector)。
类别别名
所有扩展被划分为 16 个类别,可使用类别别名批量安装:
# 使用通用类别别名(自动适配当前 PG 版本)
pg_extensions: [ pgsql-gis, pgsql-rag, pgsql-fts ]
# 或使用版本特定的类别别名
pg_extensions: [ pg18-gis, pg18-rag, pg18-fts ]
除 olap 类别外,所有类别的扩展都可以同时安装。olap 类别中存在互斥:pg_duckdb 与 pg_mooncake 冲突。
类别列表
| 类别 | 说明 | 典型扩展 |
|---|
time | 时序类 | timescaledb, pg_cron, periods |
gis | 地理类 | postgis, h3, pgrouting |
rag | 向量类 | pgvector, pgml, vchord |
fts | 搜索类 | pg_trgm, zhparser, pgroonga |
olap | 分析类 | citus, pg_duckdb, pg_analytics |
feat | 特性类 | age, pg_graphql, rum |
lang | 语言类 | plpython3u, pljava, plv8 |
type | 类型类 | hstore, ltree, citext |
util | 工具类 | http, pg_net, pgjwt |
func | 函数类 | pgcrypto, uuid-ossp, pg_uuidv7 |
admin | 管理类 | pg_repack, pgagent, pg_squeeze |
stat | 统计类 | pg_stat_statements, pg_qualstats, auto_explain |
sec | 安全类 | pgaudit, pgcrypto, pgsodium |
fdw | 外部类 | postgres_fdw, mysql_fdw, oracle_fdw |
sim | 兼容类 | orafce, babelfishpg_tds |
etl | 数据类 | pglogical, wal2json, decoderbufs |
查阅扩展目录
您可以在 Pigsty 扩展目录 网站上查阅所有可用扩展的详细信息,包括:
- 扩展名称、描述、版本
- 支持的 PostgreSQL 版本
- 支持的操作系统发行版
- 安装方式、预加载需求
- 许可证、来源仓库
4 - 下载扩展
从软件仓库下载扩展包到本地
在安装扩展前,需要确保扩展软件包已下载到本地仓库或可从上游获取。
默认行为
Pigsty 在安装过程中会自动下载默认 PostgreSQL 版本可用的主流扩展到本地软件仓库。
使用本地仓库的优势:
- 加速安装,避免重复下载
- 减少网络流量消耗
- 提高交付可靠性
- 确保版本一致性
下载新扩展
要下载额外的扩展,将其添加到 repo_extra_packages 并重建仓库:
all:
vars:
repo_extra_packages: [ pgvector, postgis, timescaledb, pg_duckdb ]
# 重新下载软件包到本地仓库
./infra.yml -t repo_build
# 刷新所有节点的软件源缓存
./node.yml -t node_repo
使用上游仓库
也可以直接从互联网上游仓库安装,无需预先下载:
# 在节点上添加上游软件源
./node.yml -t node_repo -e node_repo_modules=node,pgsql
这种方式适合:
但可能面临:
扩展来源
扩展软件包来自两个主要源:
| 仓库 | 说明 |
|---|
| PGDG | PostgreSQL 官方仓库,提供核心扩展 |
| Pigsty | Pigsty 补充仓库,提供额外扩展 |
Pigsty 仓库只收录 PGDG 仓库中不存在的扩展。一旦某扩展进入 PGDG 仓库,Pigsty 仓库会移除或与其保持一致。
仓库地址:
详细的仓库配置请参阅 扩展仓库。
5 - 安装扩展
在集群节点上安装扩展软件包
Pigsty 使用操作系统的包管理器(yum/apt)安装扩展软件包。
相关参数
两个参数用于指定要安装的扩展:
pg_packages 通常用于指定所有集群都需要的基础组件(PostgreSQL 内核、Patroni、pgBouncer 等)和必选扩展。
pg_extensions 用于指定特定集群需要的扩展。
pg_packages: # 全局基础包
- pgsql-main pgsql-common
pg_extensions: # 集群扩展
- postgis timescaledb pgvector
集群初始化时安装
在集群配置中声明扩展,初始化时自动安装:
pg-meta:
hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
vars:
pg_cluster: pg-meta
pg_extensions: [ postgis, timescaledb, pgvector, pg_duckdb ]
执行 ./pgsql.yml 初始化集群时,扩展会自动安装。
已有集群安装扩展
对于已初始化的集群,有多种方式安装扩展:
使用 Pigsty 剧本
# 修改配置后使用剧本安装
./pgsql.yml -l pg-meta -t pg_extension
# 或直接在命令行指定扩展
./pgsql.yml -l pg-meta -t pg_extension -e '{"pg_extensions":["pg_duckdb"]}'
使用 pig 包管理器
# 使用 pig 安装扩展
pig install pg_duckdb
# 批量安装
ansible pg-meta -b -a 'pig install pg_duckdb pgvector'
直接使用包管理器
# EL 系统
sudo yum install -y pg_duckdb_18*
# Debian/Ubuntu 系统
sudo apt install -y postgresql-18-pg-duckdb
使用包别名
Pigsty 支持使用标准化的包别名,自动翻译为对应 PG 版本的包名:
pg_extensions:
- pgvector # 自动翻译为 pgvector_18* (EL) 或 postgresql-18-pgvector (Debian)
- postgis # 自动翻译为 postgis36_18* (EL) 或 postgresql-18-postgis-3* (Debian)
- pgsql-gis # 类别别名,安装整个 GIS 类别的扩展
也可以直接使用原始包名:
pg_extensions:
- pgvector_18* # EL 系统的原始包名
- postgresql-18-pgvector # Debian 系统的原始包名
包别名定义参见:
验证安装
安装后可在数据库中验证:
-- 查看已安装的扩展
SELECT * FROM pg_available_extensions WHERE name = 'vector';
-- 查看扩展文件是否存在
\dx
6 - 配置扩展
预加载扩展库与配置扩展参数
部分扩展需要预加载动态库或配置参数后才能使用,本节介绍如何配置扩展。
预加载扩展
大多数扩展安装后可直接使用 CREATE EXTENSION 启用,但部分使用 PostgreSQL Hook 机制的扩展需要预加载。
预加载通过 shared_preload_libraries 参数指定,修改后需重启数据库生效。
需要预加载的扩展
以下是常见的需要预加载的扩展:
| 扩展 | 说明 |
|---|
timescaledb | 时序数据库扩展,必须放在最前面 |
citus | 分布式数据库扩展,必须放在最前面 |
pg_stat_statements | SQL 语句统计,Pigsty 默认启用 |
auto_explain | 自动记录慢查询执行计划,Pigsty 默认启用 |
pg_cron | 定时任务调度 |
pg_net | 异步 HTTP 请求 |
pg_tle | 可信语言扩展 |
pgaudit | 审计日志 |
pg_stat_kcache | 内核统计信息 |
pg_squeeze | 在线表空间回收 |
pgml | PostgresML 机器学习 |
完整列表请参阅 扩展目录(带 LOAD 标记)。
预加载顺序
shared_preload_libraries 中扩展的加载顺序很重要:
timescaledb 和 citus 必须放在最前面- 如果同时使用,
citus 应在 timescaledb 之前 - 统计类扩展应在
pg_stat_statements 之后,以使用相同的 query_id
pg_libs: 'citus, timescaledb, pg_stat_statements, auto_explain'
集群初始化时配置
在创建新集群时,使用 pg_libs 参数指定预加载的扩展:
pg-meta:
hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
vars:
pg_cluster: pg-meta
pg_libs: 'timescaledb, pg_stat_statements, auto_explain'
pg_extensions: [ timescaledb, postgis, pgvector ]
pg_libs 的值将在集群初始化时写入 shared_preload_libraries。
默认值
pg_libs 的默认值是 pg_stat_statements, auto_explain,这两个 Contrib 扩展提供基本的可观测性:
pg_stat_statements:跟踪所有 SQL 语句的执行统计auto_explain:自动记录慢查询的执行计划
已有集群修改配置
对于已初始化的集群,使用 patronictl 修改 shared_preload_libraries:
# 添加 timescaledb 到预加载库
pg edit-config pg-meta --force -p shared_preload_libraries='timescaledb, pg_stat_statements, auto_explain'
# 重启集群使配置生效
pg restart pg-meta
也可以直接修改 postgresql.conf 或使用 ALTER SYSTEM:
ALTER SYSTEM SET shared_preload_libraries = 'timescaledb, pg_stat_statements, auto_explain';
修改后需重启 PostgreSQL 服务生效。
扩展参数配置
许多扩展有可配置的参数,可以在以下位置设置:
集群初始化时
使用 pg_parameters 参数指定:
pg-meta:
vars:
pg_cluster: pg-meta
pg_libs: 'pg_cron, pg_stat_statements, auto_explain'
pg_parameters:
cron.database_name: postgres # pg_cron 使用的数据库
pg_stat_statements.track: all # 跟踪所有语句
auto_explain.log_min_duration: 1000 # 记录超过 1 秒的查询
运行时修改
使用 ALTER SYSTEM 或 patronictl:
-- 修改参数
ALTER SYSTEM SET pg_stat_statements.track = 'all';
-- 重新加载配置
SELECT pg_reload_conf();
# 使用 patronictl 修改
pg edit-config pg-meta --force -p 'pg_stat_statements.track=all'
注意事项
预加载错误会阻止启动:如果 shared_preload_libraries 中的扩展不存在或加载失败,PostgreSQL 将无法启动。确保扩展已正确安装后再添加预加载。
修改需重启:shared_preload_libraries 的修改需要重启 PostgreSQL 服务才能生效。
部分功能可用:某些扩展在不预加载的情况下可以部分使用,但完整功能需要预加载。
查看当前配置:使用以下命令查看当前的预加载库:
SHOW shared_preload_libraries;
7 - 启用扩展
在数据库中创建和启用扩展
安装扩展软件包后,需要在数据库中执行 CREATE EXTENSION 才能使用扩展功能。
查看可用扩展
安装扩展软件包后,可以查看可用的扩展:
-- 查看所有可用扩展
SELECT * FROM pg_available_extensions;
-- 查看特定扩展
SELECT * FROM pg_available_extensions WHERE name = 'vector';
-- 查看已启用的扩展
SELECT * FROM pg_extension;
创建扩展
使用 CREATE EXTENSION 在数据库中启用扩展:
-- 创建扩展
CREATE EXTENSION vector;
-- 创建扩展到指定 Schema
CREATE EXTENSION postgis SCHEMA public;
-- 自动安装依赖的扩展
CREATE EXTENSION postgis_topology CASCADE;
-- 如果不存在则创建
CREATE EXTENSION IF NOT EXISTS vector;
注意:CREATE EXTENSION 使用的是扩展名(如 vector),而非包别名(pgvector)。
集群初始化时启用
在 pg_databases 中声明扩展,集群初始化时自动创建:
pg-meta:
vars:
pg_cluster: pg-meta
pg_databases:
- name: meta
extensions:
- { name: vector } # 使用默认 Schema
- { name: postgis, schema: public } # 指定 Schema
- { name: pg_stat_statements, schema: monitor }
Pigsty 会在数据库创建后自动执行 CREATE EXTENSION。
需要预加载的扩展
部分扩展需要先添加到 shared_preload_libraries 并重启后才能创建:
pg-meta:
vars:
pg_cluster: pg-meta
pg_libs: 'timescaledb, pg_stat_statements, auto_explain'
pg_databases:
- name: meta
extensions:
- { name: timescaledb } # 需要预加载
如果未预加载就尝试创建,会收到错误信息。
需要预加载的常见扩展:timescaledb, citus, pg_cron, pg_net, pgaudit 等。详见 配置扩展。
扩展依赖
某些扩展依赖于其他扩展,需要按顺序创建:
-- postgis_topology 依赖 postgis
CREATE EXTENSION postgis;
CREATE EXTENSION postgis_topology;
-- 或使用 CASCADE 自动安装依赖
CREATE EXTENSION postgis_topology CASCADE;
不需要创建的扩展
少数扩展不通过 SQL 接口对外服务,无需执行 CREATE EXTENSION:
| 扩展 | 说明 |
|---|
wal2json | 逻辑解码插件,直接在复制槽中使用 |
decoderbufs | 逻辑解码插件 |
decoder_raw | 逻辑解码插件 |
这些扩展安装后即可使用,例如:
-- 使用 wal2json 创建逻辑复制槽
SELECT * FROM pg_create_logical_replication_slot('test_slot', 'wal2json');
查看扩展信息
-- 查看扩展详情
\dx+ vector
-- 查看扩展包含的对象
SELECT * FROM pg_extension_config_dump('vector');
-- 查看扩展版本
SELECT extversion FROM pg_extension WHERE extname = 'vector';
8 - 更新扩展
升级 PostgreSQL 扩展版本
扩展更新涉及两个层面:软件包更新(操作系统层面)和扩展对象更新(数据库层面)。
更新软件包
使用包管理器更新扩展的软件包:
# EL 系统
sudo yum update pgvector_18*
# Debian/Ubuntu 系统
sudo apt update && sudo apt upgrade postgresql-18-pgvector
使用 Pigsty 批量更新:
# 更新指定集群的扩展包
./pgsql.yml -l pg-meta -t pg_extension -e '{"pg_extensions":["pgvector"]}'
# 使用 pig 包管理器
pig update pgvector
更新扩展对象
软件包更新后,数据库中的扩展对象可能需要同步更新。
查看可更新的扩展
-- 查看已安装扩展及其版本
SELECT name, default_version, installed_version
FROM pg_available_extensions
WHERE installed_version IS NOT NULL;
-- 查看可升级的扩展
SELECT name, installed_version, default_version
FROM pg_available_extensions
WHERE installed_version IS NOT NULL
AND installed_version <> default_version;
执行扩展更新
-- 更新到最新版本
ALTER EXTENSION pgvector UPDATE;
-- 更新到指定版本
ALTER EXTENSION pgvector UPDATE TO '0.8.0';
查看更新路径
-- 查看扩展的可用升级路径
SELECT * FROM pg_extension_update_paths('pgvector');
注意事项
备份优先:更新扩展前建议先备份数据库,特别是涉及数据类型变更的扩展。
检查兼容性:某些扩展的大版本升级可能不兼容,需查阅扩展的升级文档。
预加载扩展:如果更新的是需要预加载的扩展(如 timescaledb),更新后可能需要重启数据库。
依赖关系:如果其他扩展依赖于被更新的扩展,需要按依赖顺序更新。
复制环境:在主从复制环境中,应先在从库测试更新,确认无误后再更新主库。
常见问题
更新失败
如果 ALTER EXTENSION UPDATE 失败,可能是因为:
-- 查看扩展依赖
SELECT * FROM pg_depend WHERE refobjid = (SELECT oid FROM pg_extension WHERE extname = 'pgvector');
回滚更新
PostgreSQL 扩展通常不支持直接回滚。如需回滚:
- 从备份恢复
- 或者:卸载新版本扩展,安装旧版本软件包,重新创建扩展
9 - 移除扩展
卸载 PostgreSQL 扩展
移除扩展涉及两个层面:删除扩展对象(数据库层面)和卸载软件包(操作系统层面)。
删除扩展对象
使用 DROP EXTENSION 从数据库中删除扩展:
-- 删除扩展
DROP EXTENSION pgvector;
-- 如果有依赖对象,需要级联删除
DROP EXTENSION pgvector CASCADE;
警告:CASCADE 会删除所有依赖于该扩展的对象(表、函数、视图等),请谨慎使用。
查看扩展依赖
删除前建议先检查依赖关系:
-- 查看依赖于某扩展的对象
SELECT
classid::regclass,
objid,
deptype
FROM pg_depend
WHERE refobjid = (SELECT oid FROM pg_extension WHERE extname = 'pgvector');
-- 查看使用了扩展类型的表
SELECT
c.relname AS table_name,
a.attname AS column_name,
t.typname AS type_name
FROM pg_attribute a
JOIN pg_class c ON a.attrelid = c.oid
JOIN pg_type t ON a.atttypid = t.oid
WHERE t.typname = 'vector';
移除预加载
如果扩展在 shared_preload_libraries 中,删除后需要从预加载列表移除:
# 修改 shared_preload_libraries,移除扩展
pg edit-config pg-meta --force -p shared_preload_libraries='pg_stat_statements, auto_explain'
# 重启使配置生效
pg restart pg-meta
卸载软件包
从数据库中删除扩展后,可以选择卸载软件包:
# EL 系统
sudo yum remove pgvector_18*
# Debian/Ubuntu 系统
sudo apt remove postgresql-18-pgvector
# 使用 pig 包管理器
pig remove pgvector
通常保留软件包不会有问题,仅在需要释放磁盘空间或解决冲突时才需要卸载。
注意事项
数据丢失风险:使用 CASCADE 会删除依赖对象,可能导致数据丢失。
应用兼容性:删除扩展前确保应用程序不再使用该扩展的功能。
预加载顺序:如果删除的是预加载扩展,务必同时从 shared_preload_libraries 中移除,否则数据库可能无法启动。
主从环境:在主从复制环境中,DROP EXTENSION 会自动复制到从库。
操作顺序
完整的扩展移除流程:
# 1. 检查依赖关系
psql -d mydb -c "SELECT * FROM pg_depend WHERE refobjid = (SELECT oid FROM pg_extension WHERE extname = 'pgvector');"
# 2. 删除数据库中的扩展
psql -d mydb -c "DROP EXTENSION pgvector;"
# 3. 如果是预加载扩展,从 shared_preload_libraries 移除
pg edit-config pg-meta --force -p shared_preload_libraries='pg_stat_statements, auto_explain'
# 4. 重启数据库(如果修改了预加载配置)
pg restart pg-meta
# 5. 可选:卸载软件包
sudo yum remove pgvector_18*
10 - 默认扩展
Pigsty 默认安装的 PostgreSQL 扩展
Pigsty 在初始化 PostgreSQL 集群时,会默认安装和启用一些核心扩展。
默认安装的扩展
通过 pg_packages 默认安装的扩展:
| 扩展 | 说明 |
|---|
pg_repack | 在线处理表膨胀,重要的维护工具 |
wal2json | 逻辑解码输出 JSON 格式变更,CDC 场景常用 |
通过 pg_extensions 可选安装的扩展(默认注释):
| 扩展 | 说明 |
|---|
postgis | 地理空间数据库扩展 |
timescaledb | 时序数据库扩展 |
pgvector | 向量数据类型与索引 |
默认启用的扩展
通过 pg_default_extensions 在所有数据库中默认启用的扩展:
| 扩展 | Schema | 说明 |
|---|
pg_stat_statements | monitor | SQL 语句执行统计 |
pgstattuple | monitor | 元组级统计信息 |
pg_buffercache | monitor | 缓冲区缓存检查 |
pageinspect | monitor | 页面级检查 |
pg_prewarm | monitor | 关系预热 |
pg_visibility | monitor | 可见性映射检查 |
pg_freespacemap | monitor | 空闲空间映射检查 |
postgres_fdw | public | PostgreSQL 外部数据包装器 |
file_fdw | public | 文件外部数据包装器 |
btree_gist | public | B-tree GiST 操作符类 |
btree_gin | public | B-tree GIN 操作符类 |
pg_trgm | public | 三元组匹配 |
intagg | public | 整数聚合器 |
intarray | public | 整数数组函数 |
pg_repack | - | 在线重组表 |
这些扩展提供基础的监控、运维和功能增强能力。
默认预加载的扩展
通过 pg_libs 默认预加载到 shared_preload_libraries 的扩展:
| 扩展 | 说明 |
|---|
pg_stat_statements | 跟踪所有 SQL 语句的执行统计 |
auto_explain | 自动记录慢查询的执行计划 |
这两个扩展提供基本的可观测性,强烈建议保留。
自定义默认扩展
可以通过修改配置参数来自定义默认安装和启用的扩展:
all:
vars:
# 修改默认安装的扩展包
pg_packages:
- pgsql-main pgsql-common
- pg_repack_$v* wal2json_$v*
# 修改默认安装的扩展
pg_extensions: [ postgis, timescaledb, pgvector ]
# 修改默认预加载的扩展
pg_libs: 'timescaledb, pg_stat_statements, auto_explain'
# 修改默认启用的扩展
pg_default_extensions:
- { name: pg_stat_statements, schema: monitor }
- { name: pg_repack }
# ... 添加更多
详细的扩展使用方法请参阅:
11 - 扩展仓库
Pigsty 扩展软件仓库配置
Pigsty 提供补充扩展仓库,在 PGDG 官方仓库基础上提供额外的扩展包。
YUM 仓库
适用于 EL 7/8/9/10 及其兼容系统(RHEL、Rocky、AlmaLinux、CentOS 等)。
添加仓库
# 添加 GPG 公钥
curl -fsSL https://repo.pigsty.io/key | sudo tee /etc/pki/rpm-gpg/RPM-GPG-KEY-pigsty >/dev/null
# 添加仓库配置
curl -fsSL https://repo.pigsty.io/yum/repo | sudo tee /etc/yum.repos.d/pigsty.repo >/dev/null
# 刷新缓存
sudo yum makecache
中国大陆镜像
curl -fsSL https://repo.pigsty.cc/key | sudo tee /etc/pki/rpm-gpg/RPM-GPG-KEY-pigsty >/dev/null
curl -fsSL https://repo.pigsty.cc/yum/repo | sudo tee /etc/yum.repos.d/pigsty.repo >/dev/null
仓库地址
APT 仓库
适用于 Debian 11/12/13 和 Ubuntu 22.04/24.04 及其兼容系统。
添加仓库
# 添加 GPG 公钥
curl -fsSL https://repo.pigsty.io/key | sudo gpg --dearmor -o /etc/apt/keyrings/pigsty.gpg
# 获取发行版代号并添加仓库
distro_codename=$(lsb_release -cs)
sudo tee /etc/apt/sources.list.d/pigsty.list > /dev/null <<EOF
deb [signed-by=/etc/apt/keyrings/pigsty.gpg] https://repo.pigsty.io/apt/infra generic main
deb [signed-by=/etc/apt/keyrings/pigsty.gpg] https://repo.pigsty.io/apt/pgsql ${distro_codename} main
EOF
# 刷新缓存
sudo apt update
中国大陆镜像
curl -fsSL https://repo.pigsty.cc/key | sudo gpg --dearmor -o /etc/apt/keyrings/pigsty.gpg
distro_codename=$(lsb_release -cs)
sudo tee /etc/apt/sources.list.d/pigsty.list > /dev/null <<EOF
deb [signed-by=/etc/apt/keyrings/pigsty.gpg] https://repo.pigsty.cc/apt/infra generic main
deb [signed-by=/etc/apt/keyrings/pigsty.gpg] https://repo.pigsty.cc/apt/pgsql/${distro_codename} ${distro_codename} main
EOF
仓库地址
GPG 签名
所有软件包均使用 GPG 签名:
- 指纹:
9592A7BC7A682E7333376E09E7935D8DB9BD8B20 - 短 ID:
B9BD8B20
仓库策略
Pigsty 仓库遵循以下原则:
- 补充性:只收录 PGDG 仓库中不存在的扩展
- 一致性:扩展进入 PGDG 仓库后,Pigsty 仓库会移除或保持一致
- 兼容性:支持 PostgreSQL 13-18 多个大版本
- 多平台:支持 x86_64 和 aarch64 架构
相关资源