启用扩展

在数据库中创建和启用扩展

安装扩展软件包后,需要在数据库中执行 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';

最后修改 2025-12-20: new post on pgsql/arch (19aad69)