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

返回本页常规视图.

扩展插件

利用 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 中使用扩展需要四个步骤:下载安装配置启用

  1. 下载:将扩展软件包下载到本地仓库(Pigsty 默认已下载主流扩展)
  2. 安装:在集群节点上安装扩展软件包
  3. 配置:部分扩展需要预加载或配置参数
  4. 启用:在数据库中执行 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 初始化集群后,postgistimescaledbvector 三个扩展即在 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  # 在数据库中启用

流程速查

步骤参数/命令说明
下载repo_extra_packages指定下载到本地仓库的扩展包
安装pg_extensions指定集群要安装的扩展包
配置pg_libs预加载扩展到 shared_preload_libraries
启用pg_databases.extensions在数据库中自动执行 CREATE EXTENSION

详细说明请参阅各子章节:下载安装配置启用

2 - 扩展简介

PostgreSQL 扩展的核心概念与 Pigsty 扩展生态

扩展是 PostgreSQL 的灵魂所在。Pigsty 收录了 440+ 个预编译、开箱即用的扩展插件,充分释放 PostgreSQL 的潜能。


扩展是什么

PostgreSQL 扩展(Extension)是一种模块化机制,允许在不修改核心代码的情况下增强数据库功能。 一个扩展通常包含三部分:

  • 控制文件.control):必需,包含扩展元数据
  • SQL 脚本.sql):可选,定义函数、类型、操作符等数据库对象
  • 动态库.so):可选,提供 C 语言实现的高性能功能

扩展可以为 PostgreSQL 添加:新数据类型、索引方法、函数与操作符、外部数据访问、过程语言、性能监控、安全审计等能力。


核心扩展

Pigsty 收录的扩展中,以下是最具代表性的:

扩展说明
PostGIS地理空间数据类型与索引,GIS 事实标准
TimescaleDB时序数据库,支持持续聚合、列存储、自动压缩
PGVector向量数据类型与 HNSW/IVFFlat 索引,AI 应用必备
Citus分布式数据库,水平分片扩展能力
pg_duckdb嵌入 DuckDB 分析引擎,OLAP 加速
ParadeDBElasticSearch 级别的全文搜索能力
Apache AGE图数据库,支持 OpenCypher 查询语言
pg_graphql原生 GraphQL 查询支持

绝大多数扩展可以并存甚至组合使用,产生 1+1 远大于 2 的协同效应。


扩展类别

Pigsty 将扩展划分为 16 个类别:

类别别名说明典型扩展
时序time时序数据处理timescaledb, pg_cron, periods
地理gis地理空间数据postgis, h3, pgrouting
向量rag向量检索与 AIpgvector, vchord, pg_vectorize
搜索fts全文检索pgroonga, zhparser, pg_bigm
分析olapOLAP 与分析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-stackpostgis, pgrouting, pointcloud, h3, q3c, ogr_fdw
rag-stackpgvector, vchord, pgvectorscale, pg_similarity, pg_tiktoken
fts-stackpgroonga, pg_bigm, zhparser, hunspell
olap-stackpg_duckdb, pg_mooncake, timescaledb, pg_partman, plproxy
feat-stackage, hll, rum, pg_graphql, pg_jsonschema, jsquery
stat-stackpg_show_plans, pg_stat_kcache, pg_qualstats, pg_wait_sampling
supa-stackpg_graphql, pg_jsonschema, wrappers, pgvector, pgsodium, vault

pg_extensions 中直接使用这些名称即可安装整套扩展。


扩展资源

3 - 软件包

扩展包别名与类别命名规则

Pigsty 使用包别名机制简化扩展的安装与管理。


包别名机制

管理扩展涉及多个层面的名称映射:

层面示例 pgvector示例 postgis
扩展名vectorpostgis, postgis_topology, …
包别名pgvectorpostgis
RPM 包名pgvector_18postgis36_18*
DEB 包名postgresql-18-pgvectorpostgresql-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_duckdbpg_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

这种方式适合:

  • 快速测试最新版本
  • 安装冷门扩展
  • 网络条件良好的环境

但可能面临:

  • 网络不稳定影响安装
  • 版本不一致风险

扩展来源

扩展软件包来自两个主要源:

仓库说明
PGDGPostgreSQL 官方仓库,提供核心扩展
PigstyPigsty 补充仓库,提供额外扩展

Pigsty 仓库只收录 PGDG 仓库中不存在的扩展。一旦某扩展进入 PGDG 仓库,Pigsty 仓库会移除或与其保持一致。

仓库地址:

详细的仓库配置请参阅 扩展仓库

5 - 安装扩展

在集群节点上安装扩展软件包

Pigsty 使用操作系统的包管理器(yum/apt)安装扩展软件包。


相关参数

两个参数用于指定要安装的扩展:

参数用途默认行为
pg_packages全局通用软件包确保存在(不升级)
pg_extensions集群特定扩展安装最新版本

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_statementsSQL 语句统计,Pigsty 默认启用
auto_explain自动记录慢查询执行计划,Pigsty 默认启用
pg_cron定时任务调度
pg_net异步 HTTP 请求
pg_tle可信语言扩展
pgaudit审计日志
pg_stat_kcache内核统计信息
pg_squeeze在线表空间回收
pgmlPostgresML 机器学习

完整列表请参阅 扩展目录(带 LOAD 标记)。

预加载顺序

shared_preload_libraries 中扩展的加载顺序很重要:

  • timescaledbcitus 必须放在最前面
  • 如果同时使用,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 SYSTEMpatronictl

-- 修改参数
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'

注意事项

  1. 预加载错误会阻止启动:如果 shared_preload_libraries 中的扩展不存在或加载失败,PostgreSQL 将无法启动。确保扩展已正确安装后再添加预加载。

  2. 修改需重启shared_preload_libraries 的修改需要重启 PostgreSQL 服务才能生效。

  3. 部分功能可用:某些扩展在不预加载的情况下可以部分使用,但完整功能需要预加载。

  4. 查看当前配置:使用以下命令查看当前的预加载库:

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');

注意事项

  1. 备份优先:更新扩展前建议先备份数据库,特别是涉及数据类型变更的扩展。

  2. 检查兼容性:某些扩展的大版本升级可能不兼容,需查阅扩展的升级文档。

  3. 预加载扩展:如果更新的是需要预加载的扩展(如 timescaledb),更新后可能需要重启数据库。

  4. 依赖关系:如果其他扩展依赖于被更新的扩展,需要按依赖顺序更新。

  5. 复制环境:在主从复制环境中,应先在从库测试更新,确认无误后再更新主库。


常见问题

更新失败

如果 ALTER EXTENSION UPDATE 失败,可能是因为:

  • 没有可用的升级路径
  • 扩展正在被使用
  • 权限不足
-- 查看扩展依赖
SELECT * FROM pg_depend WHERE refobjid = (SELECT oid FROM pg_extension WHERE extname = 'pgvector');

回滚更新

PostgreSQL 扩展通常不支持直接回滚。如需回滚:

  1. 从备份恢复
  2. 或者:卸载新版本扩展,安装旧版本软件包,重新创建扩展

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

通常保留软件包不会有问题,仅在需要释放磁盘空间或解决冲突时才需要卸载。


注意事项

  1. 数据丢失风险:使用 CASCADE 会删除依赖对象,可能导致数据丢失。

  2. 应用兼容性:删除扩展前确保应用程序不再使用该扩展的功能。

  3. 预加载顺序:如果删除的是预加载扩展,务必同时从 shared_preload_libraries 中移除,否则数据库可能无法启动。

  4. 主从环境:在主从复制环境中,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_statementsmonitorSQL 语句执行统计
pgstattuplemonitor元组级统计信息
pg_buffercachemonitor缓冲区缓存检查
pageinspectmonitor页面级检查
pg_prewarmmonitor关系预热
pg_visibilitymonitor可见性映射检查
pg_freespacemapmonitor空闲空间映射检查
postgres_fdwpublicPostgreSQL 外部数据包装器
file_fdwpublic文件外部数据包装器
btree_gistpublicB-tree GiST 操作符类
btree_ginpublicB-tree GIN 操作符类
pg_trgmpublic三元组匹配
intaggpublic整数聚合器
intarraypublic整数数组函数
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 仓库遵循以下原则:

  1. 补充性:只收录 PGDG 仓库中不存在的扩展
  2. 一致性:扩展进入 PGDG 仓库后,Pigsty 仓库会移除或保持一致
  3. 兼容性:支持 PostgreSQL 13-18 多个大版本
  4. 多平台:支持 x86_64 和 aarch64 架构

相关资源