扩展元数据释义

关于 PostgreSQL 扩展插件元数据字段的说明

每个扩展都有一些元数据属性,以下是这些属性的说明

  • id

扩展标识,由 Pigsty 唯一分配给每个扩展的整型标识符,用于内部排序。

  • name

扩展名,扩展在 PostgreSQL 扩展系统目录中的名称,用于 CREATE EXTESION 时引用。

扩展一般会带有同名的 <name>.control<name>*.so,以及 <name>*.sql 文件。

  • alias

扩展别名,由 Pigsty 为每个逻辑扩展分配的唯一名称,通常与 扩展名 name 保持一致。 但存在一些特例,比如安装一个扩展 RPM 包如果引入多个 Extension,那么这些 Extension 会共享一个别名,例如 postgis

  • version

扩展默认版本,通常是扩展的最新版本。通常由定义于扩展 control 文件中的版本号决定。 在一些特殊情况下,RPM 与 Debian 中可用的扩展版本可能略微有所不同。

  • category

扩展分类,用于区分扩展的功能类型,默认分为16大类: gistimeragftsolapfeatlangtypeutil, funcadminstatsecfdwsimetl 等。

  • tags

一些标签,用于描述扩展的特性

  • repo

扩展的来源仓库,CONTRIB 代表这是一个 PostgreSQL 自带扩展,PGDG 代表这是一个 PGDG 第一方扩展,PIGSTY 代表这是一个 Pigsty 第三方扩展。

  • lang

扩展使用的编程语言,通常为 C,也有一些 C++Rust 编写的扩展。也有纯 SQL 与纯数据组成的扩展。

  • need_load

带有 Load 标记,意味着这个扩展使用了 PostgreSQL Hook,需要动态加载,并重启 PostgreSQL 生效。 只有少量扩展需要动态加载,大部分扩展都是静态加载的。

  • need_ddl

带有 DDL 标记,意味着这个扩展需要执行 DDL 语句:CREATE EXTENSION

绝大多数扩展都需要执行 CREATE EXTENSION DDL 语句完成创建,但也有一些特例,例如 pg_stat_statementswal2json 等。

  • need_dbsu

安装此扩展是否需要超级用户权限?或者说,这个扩展是否被“信任” —— 只在数据库内部提供功能。

少部分扩展因为只在数据库内部提供功能,因此不需要超级用户权限就能安装,任何持有 CREATE 权限的用户都可以安装受信任的扩展。

  • relocatable

扩展是否可以被重定位?即是否可以被安装到其他 Schema 中?大部分扩展都是可以被重定位的,但也有一些特例,这些扩展会显式指定自己使用的扩展名。

  • schemas

如果扩展是可重定位的,那么它可以被安装到指定的 Schema 中,这个属性指定了扩展的默认 Schema。 PostgreSQL 默认只允许扩展使用一个 Schema,但一些扩展并不遵循这个规则,例如 citustimescaledb 等。

  • pg_ver

扩展支持的 PostgreSQL 版本,默认只考虑支持声明周期内的版本,即 12 - 16 。

  • requires

此扩展依赖的其他扩展,如果有的话。一个扩展可能同时依赖多个其他扩展,这些依赖关系通常在扩展的 control 文件中的 requires 字段里声明。

安装扩展时,可以通过 CREATE EXTENSION xxx CASCADE 语句自动安装依赖的扩展。

  • pkg

扩展软件包(RPM/DEB)名称,这里使用 $v 来替代具体的 PostgreSQL 大版本号。

  • pkg_ver

扩展软件包(RPM/DEB)的版本号,通常 RPM / DEB 包的版本与扩展本身的版本(version,从系统视图中得到)是一致的。 但依然存在极个别特例,软件包的版本与扩展本身的版本是不一致,甚至是独立演进管理的。

  • pkg_deps

扩展软件包(RPM/DEB)的依赖,不同于扩展本身的依赖(requires),这里是扩展 RPM/DEB 包的特殊依赖。

  • url

扩展的官方网站或者源代码仓库地址。

  • license

扩展使用的开源许可证,通常是 PostgreSQLMITApacheGPL 等。

  • en_desc

扩展的英文描述,用于描述扩展的功能与用途。

  • zh_desc

扩展的中文描述,用于描述扩展的功能与用途。

  • comment

一些额外的注释,用于描述扩展的特性或者注意事项。


数据库模式

CREATE TABLE IF NOT EXISTS ext.extension
(
    id          INTEGER PRIMARY KEY,
    name        TEXT NOT NULL,
    pkg         TEXT NOT NULL,
    alias       TEXT,
    category    TEXT,
    state       TEXT,
    url         TEXT,
    license     TEXT,
    tags        TEXT[],
    version     TEXT,
    repo        TEXT,
    lang        TEXT,
    contrib     BOOLEAN,
    lead        BOOLEAN,
    has_bin     BOOLEAN,
    has_lib     BOOLEAN,
    need_ddl    BOOLEAN,
    need_load   BOOLEAN,
    trusted     BOOLEAN,
    relocatable BOOLEAN,
    schemas     TEXT[],
    pg_ver      TEXT[],
    requires    TEXT[],
    rpm_ver     TEXT,
    rpm_repo    TEXT,
    rpm_pkg     TEXT,
    rpm_pg      TEXT[],
    rpm_deps    TEXT[],
    deb_ver     TEXT,
    deb_repo    TEXT,
    deb_pkg     TEXT,
    deb_deps    TEXT[],
    deb_pg      TEXT[],
    bad_case    TEXT[],
    extra       JSONB,
    ctime       DATE DEFAULT CURRENT_DATE,
    mtime       DATE DEFAULT CURRENT_DATE,
    en_desc     TEXT,
    zh_desc     TEXT,
    comment     TEXT
);
COMMENT ON TABLE ext.extension IS 'PostgreSQL Extension Table';
COMMENT ON COLUMN ext.extension.id IS 'Extension Identifier (integer)';
COMMENT ON COLUMN ext.extension.name IS 'Extension Name (in system catalog)';
COMMENT ON COLUMN ext.extension.pkg IS 'Normalized extension package name';
COMMENT ON COLUMN ext.extension.alias IS 'Download pkg group alias';
COMMENT ON COLUMN ext.extension.category IS 'Category of this extension';
COMMENT ON COLUMN ext.extension.state IS 'Extension State (available, deprecated, removed, not-ready)';
COMMENT ON COLUMN ext.extension.url IS 'Extension Repo URL';
COMMENT ON COLUMN ext.extension.license IS 'Extension License';
COMMENT ON COLUMN ext.extension.tags IS 'Extra tags';
COMMENT ON COLUMN ext.extension.version IS 'the latest available version of this extension';
COMMENT ON COLUMN ext.extension.lang IS 'Programming Language of this extension';
COMMENT ON COLUMN ext.extension.lead IS 'Mark the primary extension among one multi-ext package';
COMMENT ON COLUMN ext.extension.has_bin IS 'does this extension has binary utils';
COMMENT ON COLUMN ext.extension.has_lib IS 'Does the extension have shared library?';
COMMENT ON COLUMN ext.extension.need_ddl IS 'Extension need `CREATE EXTENSION` to work?';
COMMENT ON COLUMN ext.extension.need_load IS 'Require LOAD & shared_preload_libraries to work?';
COMMENT ON COLUMN ext.extension.trusted IS 'A Trusted extension does not require superuser to work';
COMMENT ON COLUMN ext.extension.relocatable IS 'Can this extension be relocated?';
COMMENT ON COLUMN ext.extension.schemas IS 'Installed Schema, if not relocatable';
COMMENT ON COLUMN ext.extension.pg_ver IS 'Supported PostgreSQL major versions';
COMMENT ON COLUMN ext.extension.requires IS 'Dependencies of this extension';
COMMENT ON COLUMN ext.extension.rpm_pkg IS 'RPM package name, major version is replace with $v';
COMMENT ON COLUMN ext.extension.deb_pkg IS 'DEB package name, major version is replace with $v';
COMMENT ON COLUMN ext.extension.en_desc IS 'English description';
COMMENT ON COLUMN ext.extension.zh_desc IS 'Chinese description';
COMMENT ON COLUMN ext.extension.comment IS 'Extra information';

最后修改 2025-02-23: update extension doc (0a5bb32)