pg_sorted_heap
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_sorted_heap | 0.14.0 | OLAP | PostgreSQL | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 2550 | pg_sorted_heap | 否 | 是 | 是 | 是 | 否 | 否 | - |
| 相关扩展 | storage_engine pg_ivm pgvector vchord pg_search |
|---|
sorted_hnsw.shared_cache requires shared_preload_libraries=pg_sorted_heap.
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.14.0 | 1817161514 | pg_sorted_heap | - |
| RPM | PIGSTY | 0.14.0 | 1817161514 | pg_sorted_heap_$v | - |
| DEB | PIGSTY | 0.14.0 | 1817161514 | postgresql-$v-pg-sorted-heap | - |
| OS / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
| el8.x86_64 | PIGSTY 0.14.0 el8.x86_64.pg18 : pg_sorted_heap_18 pg_sorted_heap_18-0.14.0-1PIGSTY.el8.x86_64.rpm
| PIGSTY 0.14.0 el8.x86_64.pg17 : pg_sorted_heap_17 pg_sorted_heap_17-0.14.0-1PIGSTY.el8.x86_64.rpm
| PIGSTY 0.14.0 el8.x86_64.pg16 : pg_sorted_heap_16 pg_sorted_heap_16-0.14.0-1PIGSTY.el8.x86_64.rpm
| PIGSTY MISS | PIGSTY MISS |
| el8.aarch64 | PIGSTY 0.14.0 el8.aarch64.pg18 : pg_sorted_heap_18 pg_sorted_heap_18-0.14.0-1PIGSTY.el8.aarch64.rpm
| PIGSTY 0.14.0 el8.aarch64.pg17 : pg_sorted_heap_17 pg_sorted_heap_17-0.14.0-1PIGSTY.el8.aarch64.rpm
| PIGSTY 0.14.0 el8.aarch64.pg16 : pg_sorted_heap_16 pg_sorted_heap_16-0.14.0-1PIGSTY.el8.aarch64.rpm
| PIGSTY MISS | PIGSTY MISS |
| el9.x86_64 | PIGSTY 0.14.0 el9.x86_64.pg18 : pg_sorted_heap_18 pg_sorted_heap_18-0.14.0-1PIGSTY.el9.x86_64.rpm
| PIGSTY 0.14.0 el9.x86_64.pg17 : pg_sorted_heap_17 pg_sorted_heap_17-0.14.0-1PIGSTY.el9.x86_64.rpm
| PIGSTY 0.14.0 el9.x86_64.pg16 : pg_sorted_heap_16 pg_sorted_heap_16-0.14.0-1PIGSTY.el9.x86_64.rpm
| PIGSTY MISS | PIGSTY MISS |
| el9.aarch64 | PIGSTY 0.14.0 el9.aarch64.pg18 : pg_sorted_heap_18 pg_sorted_heap_18-0.14.0-1PIGSTY.el9.aarch64.rpm
| PIGSTY 0.14.0 el9.aarch64.pg17 : pg_sorted_heap_17 pg_sorted_heap_17-0.14.0-1PIGSTY.el9.aarch64.rpm
| PIGSTY 0.14.0 el9.aarch64.pg16 : pg_sorted_heap_16 pg_sorted_heap_16-0.14.0-1PIGSTY.el9.aarch64.rpm
| PIGSTY MISS | PIGSTY MISS |
| el10.x86_64 | PIGSTY 0.14.0 el10.x86_64.pg18 : pg_sorted_heap_18 pg_sorted_heap_18-0.14.0-1PIGSTY.el10.x86_64.rpm
| PIGSTY 0.14.0 el10.x86_64.pg17 : pg_sorted_heap_17 pg_sorted_heap_17-0.14.0-1PIGSTY.el10.x86_64.rpm
| PIGSTY 0.14.0 el10.x86_64.pg16 : pg_sorted_heap_16 pg_sorted_heap_16-0.14.0-1PIGSTY.el10.x86_64.rpm
| PIGSTY MISS | PIGSTY MISS |
| el10.aarch64 | PIGSTY 0.14.0 el10.aarch64.pg18 : pg_sorted_heap_18 pg_sorted_heap_18-0.14.0-1PIGSTY.el10.aarch64.rpm
| PIGSTY 0.14.0 el10.aarch64.pg17 : pg_sorted_heap_17 pg_sorted_heap_17-0.14.0-1PIGSTY.el10.aarch64.rpm
| PIGSTY 0.14.0 el10.aarch64.pg16 : pg_sorted_heap_16 pg_sorted_heap_16-0.14.0-1PIGSTY.el10.aarch64.rpm
| PIGSTY MISS | PIGSTY MISS |
| d12.x86_64 | PIGSTY 0.14.0 d12.x86_64.pg18 : postgresql-18-pg-sorted-heap postgresql-18-pg-sorted-heap_0.14.0-1PIGSTY~bookworm_amd64.deb
| PIGSTY 0.14.0 d12.x86_64.pg17 : postgresql-17-pg-sorted-heap postgresql-17-pg-sorted-heap_0.14.0-1PIGSTY~bookworm_amd64.deb
| PIGSTY 0.14.0 d12.x86_64.pg16 : postgresql-16-pg-sorted-heap postgresql-16-pg-sorted-heap_0.14.0-1PIGSTY~bookworm_amd64.deb
| PIGSTY MISS | PIGSTY MISS |
| d12.aarch64 | PIGSTY 0.14.0 d12.aarch64.pg18 : postgresql-18-pg-sorted-heap postgresql-18-pg-sorted-heap_0.14.0-1PIGSTY~bookworm_arm64.deb
| PIGSTY 0.14.0 d12.aarch64.pg17 : postgresql-17-pg-sorted-heap postgresql-17-pg-sorted-heap_0.14.0-1PIGSTY~bookworm_arm64.deb
| PIGSTY 0.14.0 d12.aarch64.pg16 : postgresql-16-pg-sorted-heap postgresql-16-pg-sorted-heap_0.14.0-1PIGSTY~bookworm_arm64.deb
| PIGSTY MISS | PIGSTY MISS |
| d13.x86_64 | PIGSTY 0.14.0 d13.x86_64.pg18 : postgresql-18-pg-sorted-heap postgresql-18-pg-sorted-heap_0.14.0-1PIGSTY~trixie_amd64.deb
| PIGSTY 0.14.0 d13.x86_64.pg17 : postgresql-17-pg-sorted-heap postgresql-17-pg-sorted-heap_0.14.0-1PIGSTY~trixie_amd64.deb
| PIGSTY 0.14.0 d13.x86_64.pg16 : postgresql-16-pg-sorted-heap postgresql-16-pg-sorted-heap_0.14.0-1PIGSTY~trixie_amd64.deb
| PIGSTY MISS | PIGSTY MISS |
| d13.aarch64 | PIGSTY 0.14.0 d13.aarch64.pg18 : postgresql-18-pg-sorted-heap postgresql-18-pg-sorted-heap_0.14.0-1PIGSTY~trixie_arm64.deb
| PIGSTY 0.14.0 d13.aarch64.pg17 : postgresql-17-pg-sorted-heap postgresql-17-pg-sorted-heap_0.14.0-1PIGSTY~trixie_arm64.deb
| PIGSTY 0.14.0 d13.aarch64.pg16 : postgresql-16-pg-sorted-heap postgresql-16-pg-sorted-heap_0.14.0-1PIGSTY~trixie_arm64.deb
| PIGSTY MISS | PIGSTY MISS |
| u22.x86_64 | PIGSTY 0.14.0 u22.x86_64.pg18 : postgresql-18-pg-sorted-heap postgresql-18-pg-sorted-heap_0.14.0-1PIGSTY~jammy_amd64.deb
| PIGSTY 0.14.0 u22.x86_64.pg17 : postgresql-17-pg-sorted-heap postgresql-17-pg-sorted-heap_0.14.0-1PIGSTY~jammy_amd64.deb
| PIGSTY 0.14.0 u22.x86_64.pg16 : postgresql-16-pg-sorted-heap postgresql-16-pg-sorted-heap_0.14.0-1PIGSTY~jammy_amd64.deb
| PIGSTY MISS | PIGSTY MISS |
| u22.aarch64 | PIGSTY 0.14.0 u22.aarch64.pg18 : postgresql-18-pg-sorted-heap postgresql-18-pg-sorted-heap_0.14.0-1PIGSTY~jammy_arm64.deb
| PIGSTY 0.14.0 u22.aarch64.pg17 : postgresql-17-pg-sorted-heap postgresql-17-pg-sorted-heap_0.14.0-1PIGSTY~jammy_arm64.deb
| PIGSTY 0.14.0 u22.aarch64.pg16 : postgresql-16-pg-sorted-heap postgresql-16-pg-sorted-heap_0.14.0-1PIGSTY~jammy_arm64.deb
| PIGSTY MISS | PIGSTY MISS |
| u24.x86_64 | PIGSTY 0.14.0 u24.x86_64.pg18 : postgresql-18-pg-sorted-heap postgresql-18-pg-sorted-heap_0.14.0-1PIGSTY~noble_amd64.deb
| PIGSTY 0.14.0 u24.x86_64.pg17 : postgresql-17-pg-sorted-heap postgresql-17-pg-sorted-heap_0.14.0-1PIGSTY~noble_amd64.deb
| PIGSTY 0.14.0 u24.x86_64.pg16 : postgresql-16-pg-sorted-heap postgresql-16-pg-sorted-heap_0.14.0-1PIGSTY~noble_amd64.deb
| PIGSTY MISS | PIGSTY MISS |
| u24.aarch64 | PIGSTY 0.14.0 u24.aarch64.pg18 : postgresql-18-pg-sorted-heap postgresql-18-pg-sorted-heap_0.14.0-1PIGSTY~noble_arm64.deb
| PIGSTY 0.14.0 u24.aarch64.pg17 : postgresql-17-pg-sorted-heap postgresql-17-pg-sorted-heap_0.14.0-1PIGSTY~noble_arm64.deb
| PIGSTY 0.14.0 u24.aarch64.pg16 : postgresql-16-pg-sorted-heap postgresql-16-pg-sorted-heap_0.14.0-1PIGSTY~noble_arm64.deb
| PIGSTY MISS | PIGSTY MISS |
| u26.x86_64 | PIGSTY 0.14.0 u26.x86_64.pg18 : postgresql-18-pg-sorted-heap postgresql-18-pg-sorted-heap_0.14.0-1PIGSTY~resolute_amd64.deb
| PIGSTY 0.14.0 u26.x86_64.pg17 : postgresql-17-pg-sorted-heap postgresql-17-pg-sorted-heap_0.14.0-1PIGSTY~resolute_amd64.deb
| PIGSTY 0.14.0 u26.x86_64.pg16 : postgresql-16-pg-sorted-heap postgresql-16-pg-sorted-heap_0.14.0-1PIGSTY~resolute_amd64.deb
| PIGSTY MISS | PIGSTY MISS |
| u26.aarch64 | PIGSTY 0.14.0 u26.aarch64.pg18 : postgresql-18-pg-sorted-heap postgresql-18-pg-sorted-heap_0.14.0-1PIGSTY~resolute_arm64.deb
| PIGSTY 0.14.0 u26.aarch64.pg17 : postgresql-17-pg-sorted-heap postgresql-17-pg-sorted-heap_0.14.0-1PIGSTY~resolute_arm64.deb
| PIGSTY 0.14.0 u26.aarch64.pg16 : postgresql-16-pg-sorted-heap postgresql-16-pg-sorted-heap_0.14.0-1PIGSTY~resolute_arm64.deb
| PIGSTY MISS | PIGSTY MISS |
构建
您可以使用 pig build 命令构建 pg_sorted_heap 扩展的 RPM / DEB 包:
pig build pkg pg_sorted_heap # 构建 RPM / DEB 包
安装
您可以直接安装 pg_sorted_heap 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pg_sorted_heap; # 当前活跃 PG 版本安装
pig ext install -y pg_sorted_heap -v 18 # PG 18
pig ext install -y pg_sorted_heap -v 17 # PG 17
pig ext install -y pg_sorted_heap -v 16 # PG 16
dnf install -y pg_sorted_heap_18 # PG 18
dnf install -y pg_sorted_heap_17 # PG 17
dnf install -y pg_sorted_heap_16 # PG 16
apt install -y postgresql-18-pg-sorted-heap # PG 18
apt install -y postgresql-17-pg-sorted-heap # PG 17
apt install -y postgresql-16-pg-sorted-heap # PG 16
预加载配置:
shared_preload_libraries = 'pg_sorted_heap';
创建扩展:
CREATE EXTENSION pg_sorted_heap;
用法
pg_sorted_heap 增加了 sorted_heap 表访问方法、按页 zone-map 裁剪、维护辅助函数、内置 svec/hsvec 向量类型、集成进 planner 的 sorted_hnsw 索引访问方法,以及稳定版 GraphRAG 封装。上游文档说明当前发布接口支持 PostgreSQL 16、17 和 18。
Sorted Heap 表
在带有主键的表上使用 USING sorted_heap。通过 COPY 路径批量导入时会按主键排序;compaction 会对已有行做全局排序,并重建 zone map:
CREATE EXTENSION pg_sorted_heap;
CREATE TABLE events (
ts timestamptz,
src text,
data jsonb,
PRIMARY KEY (ts, src)
) USING sorted_heap;
COPY events FROM '/path/to/events.csv';
SELECT sorted_heap_compact('events'::regclass);
EXPLAIN (ANALYZE, BUFFERS)
SELECT *
FROM events
WHERE ts BETWEEN '2026-01-01' AND '2026-01-02'
AND src = 'sensor-42';
README 描述了针对主键谓词由 planner 注入的 SortedHeapScan 路径,以及在 heap block 粒度上的 zone-map 裁剪。
维护与观测
稳定维护函数包括:
SELECT sorted_heap_compact('events'::regclass);
CALL sorted_heap_compact_online('events'::regclass);
SELECT sorted_heap_merge('events'::regclass);
CALL sorted_heap_merge_online('events'::regclass);
SELECT sorted_heap_rebuild_zonemap('events'::regclass);
SELECT sorted_heap_zonemap_stats('events'::regclass);
分区辅助函数作用于父表下具体的 sorted-heap 叶子分区:
SELECT * FROM sorted_heap_partition_status('events_parent'::regclass);
SELECT * FROM sorted_heap_partition_maintenance_plan('events_parent'::regclass, 'compact');
SELECT * FROM sorted_heap_compact_partitions('events_parent'::regclass);
向量搜索
稳定向量 API 包括 float32 向量 svec(dim)、float16 向量 hsvec(dim),以及 sorted_hnsw 索引访问方法:
CREATE TABLE documents (
id bigserial PRIMARY KEY,
embedding svec(384),
content text
);
CREATE INDEX documents_embedding_idx
ON documents USING sorted_hnsw (embedding)
WITH (m = 16, ef_construction = 200);
SET sorted_hnsw.ef_search = 96;
SELECT id, content
FROM documents
ORDER BY embedding <=> '[0.1,0.2,0.3]'::svec
LIMIT 10;
如果希望基表存储更紧凑,可以使用 hsvec 和对应的 operator class:
CREATE TABLE documents_compact (
id bigserial PRIMARY KEY,
embedding hsvec(384),
content text
);
CREATE INDEX documents_compact_embedding_idx
ON documents_compact USING sorted_hnsw (embedding hsvec_cosine_ops)
WITH (m = 16, ef_construction = 200);
共享解码图缓存由 sorted_hnsw.shared_cache 控制。上游示例特别说明,使用它需要预加载该扩展:
shared_preload_libraries = 'pg_sorted_heap'
SET sorted_hnsw.shared_cache = on;
GraphRAG
稳定版 fact-shaped GraphRAG 入口要求事实数据按 (entity_id, relation_id, target_id) 聚簇,或先注册一组别名映射:
CREATE TABLE facts (
entity_id int4,
relation_id int2,
target_id int4,
embedding svec(384),
payload text,
PRIMARY KEY (entity_id, relation_id, target_id)
) USING sorted_heap;
CREATE INDEX facts_embedding_idx
ON facts USING sorted_hnsw (embedding)
WITH (m = 24, ef_construction = 200);
SET sorted_hnsw.ef_search = 128;
SELECT *
FROM sorted_heap_graph_rag(
'facts'::regclass,
'[0.1,0.2,0.3]'::svec,
relation_path := ARRAY[1, 2],
ann_k := 64,
top_k := 10,
score_mode := 'path'
);
如果事实表使用了不同的列名,可以注册一次替代映射:
SELECT sorted_heap_graph_register(
'facts_alias'::regclass,
entity_column := 'src_id',
relation_column := 'edge_type',
target_column := 'dst_id',
embedding_column := 'vec',
payload_column := 'body'
);
对于按路由或租户分片的事实表,可使用 sorted_heap_graph_route(...),并通过 sorted_heap_graph_route_plan(...) 查看路由计划。
稳定 GUC
sorted_heap.enable_scan_pruning:启用 sorted-heap custom scan 裁剪;默认on。sorted_heap.vacuum_rebuild_zonemap:在VACUUM期间重建 zone map;默认off。sorted_heap.lazy_update:推迟即时 zone-map 更新维护;默认off。sorted_hnsw.ef_search:运行时 HNSW 搜索宽度;默认64。sorted_hnsw.shared_cache:预加载后使用的共享解码图缓存;默认on。sorted_hnsw.sq8:SQ8 解码缓存表示;默认on。sorted_hnsw.build_sq8:低内存索引构建模式;默认off。
注意事项
sorted_heap.lazy_update = on会牺牲 scan pruning,换取 update-heavy 工作负载下更快的更新,直到 compaction 或 merge 恢复裁剪效果。sorted_hnsw.shared_cache应与shared_preload_libraries = 'pg_sorted_heap'配合使用。- planner 集成的
sorted_hnsw有序扫描需要LIMIT;SQL API 说明,在没有 limit 或LIMIT > sorted_hnsw.ef_search时不会选择它们。 - 底层 GraphRAG 与旧式/手工 ANN 辅助函数仍有文档,但稳定的应用侧 API 是
docs/api-stable.md中的精简接口。