Skip to content

Commit dafb227

Browse files
committed
add extension universe schema
1 parent 2f12ae6 commit dafb227

5 files changed

Lines changed: 253 additions & 9 deletions

File tree

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ load:
6666
cat db/category.csv | psql $(PGURL) -c "COPY pgext.category FROM STDIN CSV HEADER;"
6767
cat db/repository.csv | psql $(PGURL) -c "COPY pgext.repository FROM STDIN CSV HEADER;"
6868
cat db/extension.csv | psql $(PGURL) -c "COPY pgext.extension FROM STDIN CSV HEADER;"
69+
cat db/universe.csv | psql $(PGURL) -c "COPY pgext.universe FROM STDIN CSV HEADER;"
6970

7071
# dump extension data to data dir
7172
dd:

db/schema.sql

Lines changed: 116 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ CREATE TABLE IF NOT EXISTS pgext.extension
246246

247247
CREATE INDEX IF NOT EXISTS ext_name_pkg_idx ON pgext.extension (name, pkg);
248248

249-
COMMENT ON TABLE pgext.extension IS 'PostgreSQL Extension Central Catalog Table';
249+
COMMENT ON TABLE pgext.extension IS 'Packaged PostgreSQL extension standard catalog; pgext.universe is its ecosystem superset';
250250
COMMENT ON COLUMN pgext.extension.id IS 'Unique integer identifier for each extension';
251251
COMMENT ON COLUMN pgext.extension.name IS 'Extension name as it appears in PostgreSQL system catalog (pg_extension)';
252252
COMMENT ON COLUMN pgext.extension.pkg IS 'Normalized package name used for package management (may differ from extension name)';
@@ -289,6 +289,121 @@ COMMENT ON COLUMN pgext.extension.zh_desc IS 'Chinese description of extension f
289289
COMMENT ON COLUMN pgext.extension.comment IS 'Additional notes, special instructions, or warnings';
290290
COMMENT ON COLUMN pgext.extension.mtime IS 'Last modification timestamp of this record';
291291

292+
-- BEGIN PGEXT UNIVERSE DDL
293+
-----------------------------------
294+
-- Extension Universe
295+
-----------------------------------
296+
-- The complete PostgreSQL extension ecosystem. pgext.extension is the
297+
-- packaged standard catalog and every extension row is also present here.
298+
CREATE TABLE IF NOT EXISTS pgext.universe
299+
(
300+
id INTEGER PRIMARY KEY,
301+
name TEXT NOT NULL UNIQUE,
302+
pkg TEXT NOT NULL,
303+
lead_ext TEXT,
304+
category TEXT,
305+
state TEXT,
306+
url TEXT,
307+
license TEXT,
308+
tags TEXT[],
309+
version TEXT,
310+
repo TEXT,
311+
lang TEXT,
312+
contrib BOOLEAN,
313+
lead BOOLEAN,
314+
has_bin BOOLEAN,
315+
has_lib BOOLEAN,
316+
need_ddl BOOLEAN,
317+
need_load BOOLEAN,
318+
trusted BOOLEAN,
319+
relocatable BOOLEAN,
320+
schemas TEXT[],
321+
pg_ver TEXT[],
322+
requires TEXT[],
323+
require_by TEXT[],
324+
see_also TEXT[],
325+
rpm_ver TEXT,
326+
rpm_repo TEXT,
327+
rpm_pkg TEXT,
328+
rpm_pg TEXT[],
329+
rpm_deps TEXT[],
330+
deb_ver TEXT,
331+
deb_repo TEXT,
332+
deb_pkg TEXT,
333+
deb_deps TEXT[],
334+
deb_pg TEXT[],
335+
source TEXT,
336+
ext_type TEXT,
337+
ext_kernel TEXT,
338+
ext_vendor TEXT,
339+
star_cnt INTEGER,
340+
watch_cnt INTEGER,
341+
fork_cnt INTEGER,
342+
last_commit_date DATE,
343+
last_release_date DATE,
344+
last_update_date DATE,
345+
extra JSONB,
346+
en_desc TEXT,
347+
zh_desc TEXT,
348+
comment TEXT,
349+
mtime DATE DEFAULT CURRENT_DATE
350+
);
351+
352+
CREATE INDEX IF NOT EXISTS universe_name_pkg_idx ON pgext.universe (name, pkg);
353+
354+
COMMENT ON TABLE pgext.universe IS 'PostgreSQL 扩展生态全集。该表是 pgext.extension 打包标准目录的超集,还包含源码可用但尚未打包的扩展、云厂商或托管服务专有扩展,以及经过发现和校准后确认应纳入目录的扩展。它不是任务队列或中间暂存表;面向网站报告、扩展分析、后续打包评估和人工维护。';
355+
COMMENT ON COLUMN pgext.universe.id IS '扩展记录的全局数值 ID;作为 universe 主键,用于稳定排序、引用和与历史扩展目录兼容。';
356+
COMMENT ON COLUMN pgext.universe.name IS '实际 PostgreSQL extension 名称,通常来自 *.control 文件名、CREATE EXTENSION 名称或官方文档;在 universe 中唯一。';
357+
COMMENT ON COLUMN pgext.universe.pkg IS '归一化后的项目包名或源码包名;一个包可以提供多个 extension,因此它可能不同于 name。';
358+
COMMENT ON COLUMN pgext.universe.lead_ext IS '同一软件包包含多个 extension 时的主扩展名称;单扩展包通常等于 name 或为空。';
359+
COMMENT ON COLUMN pgext.universe.category IS '功能分类代码,限定在 TIME、GIS、RAG、FTS、OLAP、FEAT、LANG、TYPE、UTIL、FUNC、ADMIN、STAT、SEC、FDW、SIM、ETL 等目录分类中。';
360+
COMMENT ON COLUMN pgext.universe.state IS '扩展生命周期或收录状态;已打包基线通常为 available,新增非打包扩展通常为 n/a,历史值可能包含 deprecated、removed、not-ready。';
361+
COMMENT ON COLUMN pgext.universe.url IS '扩展主页、源码仓库、发行页面或云厂商文档的规范 URL;用于人工核查、仓库元数据匹配和报告跳转。';
362+
COMMENT ON COLUMN pgext.universe.license IS '归一化后的许可证名称,例如 PostgreSQL、MIT、Apache-2.0、GPL-3.0、Commercial、Unknown。';
363+
COMMENT ON COLUMN pgext.universe.tags IS '扩展标签数组,用于补充分类检索,例如 pgrx、vector、fdw、auth、timeseries、cloud 等。';
364+
COMMENT ON COLUMN pgext.universe.version IS '已知的最新扩展版本或项目版本;优先来自 control 文件、发布信息、包元数据或官方文档。';
365+
COMMENT ON COLUMN pgext.universe.repo IS '扩展在当前目录中的来源或打包归属标记;基线扩展常见值包括 PGDG、PIGSTY、CONTRIB、MIXED,新增未打包扩展通常为 n/a。';
366+
COMMENT ON COLUMN pgext.universe.lang IS '主要实现语言或扩展形态,例如 C、C++、SQL、Rust、Python、Java、Data;用于生态分析和打包风险判断。';
367+
COMMENT ON COLUMN pgext.universe.contrib IS '是否属于 PostgreSQL 官方 contrib 扩展;仅核心 PostgreSQL 随附扩展应为 true。';
368+
COMMENT ON COLUMN pgext.universe.lead IS '是否为所在 pkg 的主扩展;网站包页面和安装矩阵通常以主扩展代表一个软件包。';
369+
COMMENT ON COLUMN pgext.universe.has_bin IS '扩展软件包是否包含需要安装或暴露给用户的命令行二进制程序。';
370+
COMMENT ON COLUMN pgext.universe.has_lib IS '扩展是否包含 PostgreSQL 可加载共享库;C/C++/Rust 等编译型扩展通常为 true,纯 SQL 扩展通常为 false。';
371+
COMMENT ON COLUMN pgext.universe.need_ddl IS '是否需要执行 CREATE EXTENSION 或等价 DDL 才能启用;仅提供外部工具或数据文件的包可能为 false。';
372+
COMMENT ON COLUMN pgext.universe.need_load IS '是否需要显式 LOAD、shared_preload_libraries、session_preload_libraries 或类似预加载配置;普通 module_pathname 不应单独视为需要预加载。';
373+
COMMENT ON COLUMN pgext.universe.trusted IS '扩展是否可由非超级用户在满足权限条件时安装;对应 PostgreSQL trusted extension 语义。';
374+
COMMENT ON COLUMN pgext.universe.relocatable IS '扩展对象是否允许安装到非默认 schema 或迁移 schema;来自 control 文件 relocatable 字段或文档判断。';
375+
COMMENT ON COLUMN pgext.universe.schemas IS '扩展固定或推荐使用的 schema 列表;不可重定位或有固定对象路径要求的扩展会填写。';
376+
COMMENT ON COLUMN pgext.universe.pg_ver IS '扩展声明支持的 PostgreSQL 主版本数组;不等同于二进制包实际可用性。';
377+
COMMENT ON COLUMN pgext.universe.requires IS '安装或使用该扩展前需要先安装的其他 PostgreSQL extension 名称数组。';
378+
COMMENT ON COLUMN pgext.universe.require_by IS '依赖该扩展的其他 PostgreSQL extension 名称数组;通常由全局依赖关系反向生成。';
379+
COMMENT ON COLUMN pgext.universe.see_also IS '相关、替代或可比较的扩展名称数组,用于目录导航和人工评估。';
380+
COMMENT ON COLUMN pgext.universe.rpm_ver IS 'RPM/YUM/DNF 渠道中已知的最新包版本;为空表示未维护 RPM 包信息。';
381+
COMMENT ON COLUMN pgext.universe.rpm_repo IS 'RPM 包来源仓库或组织,例如 PGDG、PIGSTY、EPEL;用于解释 rpm_pkg 的来源。';
382+
COMMENT ON COLUMN pgext.universe.rpm_pkg IS 'RPM 包名模板,通常用 $v 表示 PostgreSQL 主版本占位符,例如 postgresql$v-pgvector。';
383+
COMMENT ON COLUMN pgext.universe.rpm_pg IS '该扩展存在 RPM 包的 PostgreSQL 主版本数组;来自包仓库解析或人工维护。';
384+
COMMENT ON COLUMN pgext.universe.rpm_deps IS 'RPM 包层面的依赖包名数组,记录系统库、其他 RPM 包或扩展包依赖。';
385+
COMMENT ON COLUMN pgext.universe.deb_ver IS 'DEB/APT 渠道中已知的最新包版本;为空表示未维护 DEB 包信息。';
386+
COMMENT ON COLUMN pgext.universe.deb_repo IS 'DEB 包来源仓库或组织,例如 PGDG、PIGSTY;用于解释 deb_pkg 的来源。';
387+
COMMENT ON COLUMN pgext.universe.deb_pkg IS 'DEB 包名模板,通常用 $v 表示 PostgreSQL 主版本占位符,例如 postgresql-$v-pgvector。';
388+
COMMENT ON COLUMN pgext.universe.deb_deps IS 'DEB 包层面的依赖包名数组,记录系统库、其他 DEB 包或扩展包依赖。';
389+
COMMENT ON COLUMN pgext.universe.deb_pg IS '该扩展存在 DEB 包的 PostgreSQL 主版本数组;来自包仓库解析或人工维护。';
390+
COMMENT ON COLUMN pgext.universe.source IS 'Pigsty 自行构建时使用的源码包文件名或源码包标识;不是发现来源 URL,也不是仓库主页。';
391+
COMMENT ON COLUMN pgext.universe.ext_type IS '扩展形态标签,从原 extra.type 上提而来;取值为 standard、preload、puresql、headless,用于区分普通 SQL+共享库扩展、预加载扩展、纯 SQL 扩展和无 CREATE EXTENSION 前端的共享库模块。';
392+
COMMENT ON COLUMN pgext.universe.ext_kernel IS '扩展绑定或要求的 PostgreSQL 内核、发行版或兼容内核标识,从原 extra.kernel 上提而来,例如 ivorysql、babelfish、pgedge、orioledb、percona-pg。';
393+
COMMENT ON COLUMN pgext.universe.ext_vendor IS '扩展所属厂商、云服务商或专有发行方,从原 extra.vendor 上提而来,例如 AWS、HighGo、pgEdge、Percona、HaloTech。';
394+
COMMENT ON COLUMN pgext.universe.star_cnt IS '上游仓库 star 数;来自 GitHub/Gitea 等公开仓库元数据,非仓库或低置信度来源保持 NULL。';
395+
COMMENT ON COLUMN pgext.universe.watch_cnt IS '上游仓库 watch/subscriber 数;优先表示 GitHub subscribers_count 或 Gitea watchers_count。';
396+
COMMENT ON COLUMN pgext.universe.fork_cnt IS '上游仓库 fork 数;来自 GitHub/Gitea/GitLab 等公开仓库元数据。';
397+
COMMENT ON COLUMN pgext.universe.last_commit_date IS '最新已知上游代码提交日期,或 contrib 策略日期;由 timestamptz 按 UTC 转换为 date。';
398+
COMMENT ON COLUMN pgext.universe.last_release_date IS '最新已知上游 release/tag/PGXN 发布日期,或 contrib 发布日期;由 timestamptz 按 UTC 转换为 date。';
399+
COMMENT ON COLUMN pgext.universe.last_update_date IS '最新已知活动日期;可来自 commit、release、tag、PGXN、官方文档或低置信度 metadata freshness。';
400+
COMMENT ON COLUMN pgext.universe.extra IS '稳定扩展元数据 JSONB;type、kernel、vendor 已上提为 ext_type、ext_kernel、ext_vendor,star 已移除并上提为 star_cnt,pgrx 取值统一规范为 0.xx.0。';
401+
COMMENT ON COLUMN pgext.universe.en_desc IS '英文功能描述,面向网站、报告和搜索展示;优先来自 control comment、仓库描述或官方文档摘要。';
402+
COMMENT ON COLUMN pgext.universe.zh_desc IS '中文功能描述,面向中文网站、报告和人工维护;应是对 en_desc 或官方描述的准确中文表达。';
403+
COMMENT ON COLUMN pgext.universe.comment IS '最终目录层面的人工备注、限制说明或维护提示;不用于保存采集过程日志。';
404+
COMMENT ON COLUMN pgext.universe.mtime IS '该扩展记录最后一次人工或脚本维护日期;用于判断目录数据新鲜度。';
405+
-- END PGEXT UNIVERSE DDL
406+
292407
-----------------------------------
293408
-- Extension Documentation
294409
-----------------------------------

0 commit comments

Comments
 (0)