这是本节的多页打印视图。 .
扩展插件
1 - 快速开始
在 Pigsty 中使用扩展需要四个步骤:下载、安装、配置、启用。
- 下载:将扩展软件包下载到本地仓库(默认本地仓库只保证基础内核与
pgsql-main包集) - 安装:在集群节点上安装扩展软件包
- 配置:部分扩展需要预加载或配置参数
- 启用:在数据库中执行
CREATE EXTENSION创建扩展
声明式配置
在 Pigsty 配置清单中声明扩展,集群初始化时自动完成安装与启用:
执行 ./pgsql.yml 初始化集群后,postgis、timescaledb、vector 三个扩展即在 meta 数据库中可用。
命令式操作
对于已有集群,可以使用命令行方式添加扩展:
也可以使用 pig 包管理器安装扩展包,然后在数据库内执行 CREATE EXTENSION:
流程速查
| 步骤 | 参数/命令 | 说明 |
|---|---|---|
| 下载 | repo_extra_packages |
指定下载到本地仓库的扩展包 |
| 安装 | pg_extensions |
指定集群要安装的扩展包 |
| 配置 | pg_libs |
预加载扩展到 shared_preload_libraries |
| 启用 | pg_databases.extensions |
在数据库中自动执行 CREATE EXTENSION |
2 - 扩展简介
扩展是 PostgreSQL 的灵魂所在。Pigsty 收录了 575 个预编译、开箱即用的扩展插件,充分释放 PostgreSQL 的潜能。
扩展是什么
PostgreSQL 扩展(Extension)是一种模块化机制,允许在不修改核心代码的情况下增强数据库功能。 一个扩展通常包含三部分:
- 控制文件(
.control):必需,包含扩展元数据 - SQL 脚本(
.sql):可选,定义函数、类型、操作符等数据库对象 - 动态库(
.so):可选,提供 C 语言实现的高性能功能
扩展可以为 PostgreSQL 添加:新数据类型、索引方法、函数与操作符、外部数据访问、过程语言、性能监控、安全审计等能力。
核心扩展
Pigsty 收录的扩展中,以下是最具代表性的:
| 扩展 | 说明 |
|---|---|
| PostGIS | 地理空间数据类型与索引,GIS 事实标准 |
| TimescaleDB | 时序数据库,支持持续聚合、列存储、自动压缩 |
| PGVector | 向量数据类型与 HNSW/IVFFlat 索引,AI 应用必备 |
| Citus | 分布式数据库,水平分片扩展能力 |
| pg_duckdb | 嵌入 DuckDB 分析引擎,OLAP 加速 |
| pg_search | ParadeDB 搜索扩展,提供 BM25 与全文检索能力 |
| Apache AGE | 图数据库,支持 OpenCypher 查询语言 |
| pg_graphql | 原生 GraphQL 查询支持 |
绝大多数扩展可以并存甚至组合使用,产生 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 中直接使用这些名称即可安装整套扩展。
扩展资源
- 扩展目录:查阅所有可用扩展的详细信息
- 扩展仓库:Pigsty 扩展软件仓库
- pig 包管理器:命令行扩展管理工具
- GitHub Pigsty:Pigsty 源代码仓库
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 包名:
Pigsty 会根据操作系统和 PostgreSQL 版本自动翻译为正确的包名。
CREATE EXTENSION 使用的是 扩展名(如 vector),而非包别名(pgvector)。
类别别名
所有扩展被划分为 16 个类别,可使用类别别名批量安装:
除 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_mooncake |
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 18 内核包下载到本地软件仓库。默认额外下载集为 repo_extra_packages_default: [ pgsql-main ],包含 PostgreSQL 内核、客户端、过程语言,以及 pg_repack、wal2json、pgvector 等基础扩展包。
如果需要 575 个扩展目录中的其他扩展,请显式加入 repo_extra_packages;Pigsty 不会在默认安装时把全部扩展都下载到本地。
使用本地仓库的优势:
- 加速安装,避免重复下载
- 减少网络流量消耗
- 提高交付可靠性
- 确保版本一致性
下载新扩展
要下载额外的扩展,将其添加到 repo_extra_packages 并重建仓库:
使用上游仓库
也可以直接从互联网上游仓库安装,无需预先下载:
这种方式适合:
- 快速测试最新版本
- 安装冷门扩展
- 网络条件良好的环境
但可能面临:
- 网络不稳定影响安装
- 版本不一致风险
扩展来源
扩展软件包来自两个主要源:
| 仓库 | 说明 |
|---|---|
| PGDG | PostgreSQL 官方仓库,提供核心扩展 |
| Pigsty | Pigsty 补充仓库,提供额外扩展 |
Pigsty 仓库只收录 PGDG 仓库中不存在的扩展。一旦某扩展进入 PGDG 仓库,Pigsty 仓库会移除或与其保持一致。
仓库地址:
- PGDG YUM: https://download.postgresql.org/pub/repos/yum/
- PGDG APT: https://apt.postgresql.org/pub/repos/apt/
- Pigsty YUM: https://repo.pigsty.io/yum/
- Pigsty APT: https://repo.pigsty.io/apt/
详细的仓库配置请参阅 扩展仓库。
5 - 安装扩展
Pigsty 使用操作系统的包管理器(yum/apt)安装扩展软件包。
相关参数
两个参数用于指定要安装的扩展:
| 参数 | 用途 | 默认行为 |
|---|---|---|
pg_packages |
全局通用软件包 | 确保存在(不升级) |
pg_extensions |
集群特定扩展 | 安装最新版本 |
pg_packages 通常用于指定所有集群都需要的基础组件(PostgreSQL 内核、Patroni、pgBouncer 等)和必选扩展。
pg_extensions 用于指定特定集群需要的扩展。
集群初始化时安装
在集群配置中声明扩展,初始化时自动安装:
执行 ./pgsql.yml 初始化集群时,扩展会自动安装。
已有集群安装扩展
对于已初始化的集群,有多种方式安装扩展:
使用 Pigsty 剧本
使用 pig 包管理器
直接使用包管理器
使用包别名
Pigsty 支持使用标准化的包别名,自动翻译为对应 PG 版本的包名:
也可以直接使用原始包名:
包别名定义参见:
验证安装
安装后可在数据库中验证:
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 参数指定预加载的扩展:
pg_libs 的值将在集群初始化时写入 shared_preload_libraries。
默认值
pg_libs 的默认值是 pg_stat_statements, auto_explain,这两个 Contrib 扩展提供基本的可观测性:
pg_stat_statements:跟踪所有 SQL 语句的执行统计auto_explain:自动记录慢查询的执行计划
已有集群修改配置
对于已初始化的集群,使用 patronictl 修改 shared_preload_libraries:
也可以直接修改 postgresql.conf 或使用 ALTER SYSTEM:
修改后需重启 PostgreSQL 服务生效。
扩展参数配置
许多扩展有可配置的参数,可以在以下位置设置:
集群初始化时
使用 pg_parameters 参数指定:
运行时修改
使用 ALTER SYSTEM 或 patronictl:
注意事项
-
预加载错误会阻止启动:如果
shared_preload_libraries中的扩展不存在或加载失败,PostgreSQL 将无法启动。确保扩展已正确安装后再添加预加载。 -
修改需重启:
shared_preload_libraries的修改需要重启 PostgreSQL 服务才能生效。 -
部分功能可用:某些扩展在不预加载的情况下可以部分使用,但完整功能需要预加载。
-
查看当前配置:使用以下命令查看当前的预加载库:
7 - 启用扩展
安装扩展软件包后,需要在数据库中执行 CREATE EXTENSION 才能使用扩展功能。
查看可用扩展
安装扩展软件包后,可以查看可用的扩展:
创建扩展
使用 CREATE EXTENSION 在数据库中启用扩展:
CREATE EXTENSION 使用的是 扩展名(如 vector),而非包别名(pgvector)。
集群初始化时启用
在 pg_databases 中声明扩展,集群初始化时自动创建:
Pigsty 会在数据库创建后自动执行 CREATE EXTENSION。
需要预加载的扩展
部分扩展需要先添加到 shared_preload_libraries 并重启后才能创建:
如果未预加载就尝试创建,会收到错误信息。
需要预加载的常见扩展:timescaledb, citus, pg_cron, pg_net, pgaudit 等。详见 配置扩展。
扩展依赖
某些扩展依赖于其他扩展,需要按顺序创建:
不需要创建的扩展
少数扩展不通过 SQL 接口对外服务,无需执行 CREATE EXTENSION:
| 扩展 | 说明 |
|---|---|
wal2json |
逻辑解码插件,直接在复制槽中使用 |
decoderbufs |
逻辑解码插件 |
decoder_raw |
逻辑解码插件 |
这些扩展安装后即可使用,例如:
查看扩展信息
8 - 更新扩展
扩展更新涉及两个层面:软件包更新(操作系统层面)和 扩展对象更新(数据库层面)。
更新软件包
使用包管理器更新扩展的软件包:
使用 Pigsty 批量更新:
更新扩展对象
软件包更新后,数据库中的扩展对象可能需要同步更新。
查看可更新的扩展
执行扩展更新
查看更新路径
注意事项
-
备份优先:更新扩展前建议先备份数据库,特别是涉及数据类型变更的扩展。
-
检查兼容性:某些扩展的大版本升级可能不兼容,需查阅扩展的升级文档。
-
预加载扩展:如果更新的是需要预加载的扩展(如
timescaledb),更新后可能需要重启数据库。 -
依赖关系:如果其他扩展依赖于被更新的扩展,需要按依赖顺序更新。
-
复制环境:在主从复制环境中,应先在从库测试更新,确认无误后再更新主库。
常见问题
更新失败
如果 ALTER EXTENSION UPDATE 失败,可能是因为:
- 没有可用的升级路径
- 扩展正在被使用
- 权限不足
回滚更新
PostgreSQL 扩展通常不支持直接回滚。如需回滚:
- 从备份恢复
- 或者:卸载新版本扩展,安装旧版本软件包,重新创建扩展
9 - 移除扩展
移除扩展涉及两个层面:删除扩展对象(数据库层面)和 卸载软件包(操作系统层面)。
删除扩展对象
使用 DROP EXTENSION 从数据库中删除扩展:
警告:
CASCADE会删除所有依赖于该扩展的对象(表、函数、视图等),请谨慎使用。
查看扩展依赖
删除前建议先检查依赖关系:
移除预加载
如果扩展在 shared_preload_libraries 中,删除后需要从预加载列表移除:
卸载软件包
从数据库中删除扩展后,可以选择卸载软件包:
通常保留软件包不会有问题,仅在需要释放磁盘空间或解决冲突时才需要卸载。
注意事项
-
数据丢失风险:使用
CASCADE会删除依赖对象,可能导致数据丢失。 -
应用兼容性:删除扩展前确保应用程序不再使用该扩展的功能。
-
预加载顺序:如果删除的是预加载扩展,务必同时从
shared_preload_libraries中移除,否则数据库可能无法启动。 -
主从环境:在主从复制环境中,
DROP EXTENSION会自动复制到从库。
操作顺序
完整的扩展移除流程:
10 - 默认扩展
Pigsty 在初始化 PostgreSQL 集群时,会默认安装和启用一些核心扩展。
默认安装的扩展
通过 pg_packages 默认安装的扩展:
| 扩展 | 说明 |
|---|---|
pg_repack |
在线处理表膨胀,重要的维护工具 |
wal2json |
逻辑解码输出 JSON 格式变更,CDC 场景常用 |
pgvector |
向量数据类型与索引,默认随 pgsql-main 安装 |
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 |
repack |
在线重组表 |
这些扩展提供基础的监控、运维和功能增强能力。
默认预加载的扩展
通过 pg_libs 默认预加载到 shared_preload_libraries 的扩展:
| 扩展 | 说明 |
|---|---|
pg_stat_statements |
跟踪所有 SQL 语句的执行统计 |
auto_explain |
自动记录慢查询的执行计划 |
这两个扩展提供基本的可观测性,强烈建议保留。
自定义默认扩展
可以通过修改配置参数来自定义默认安装和启用的扩展:
详细的扩展使用方法请参阅:
11 - 扩展仓库
Pigsty 提供补充扩展仓库,在 PGDG 官方仓库基础上提供额外的扩展包。
YUM 仓库
适用于 EL 8/9/10 及其兼容系统(RHEL、Rocky、AlmaLinux、CentOS 等)。
添加仓库
中国大陆镜像
仓库地址
APT 仓库
适用于 Debian 12/13 和 Ubuntu 22.04/24.04/26.04 及其兼容系统。
添加仓库
中国大陆镜像
仓库地址
GPG 签名
所有软件包均使用 GPG 签名:
- 指纹:
9592A7BC7A682E7333376E09E7935D8DB9BD8B20 - 短 ID:
B9BD8B20
仓库策略
Pigsty 仓库遵循以下原则:
- 补充性:只收录 PGDG 仓库中不存在的扩展
- 一致性:扩展进入 PGDG 仓库后,Pigsty 仓库会移除或保持一致
- 兼容性:支持 PostgreSQL 14-18 多个大版本
- 多平台:支持 x86_64 和 aarch64 架构
相关资源
- Pigsty 扩展目录:查阅所有可用扩展
- PGDG YUM 仓库
- PGDG APT 仓库