我很高兴宣布发布 pg_sorted_heap 0.13.0:这是一个 PostgreSQL 扩展,提供物理有序堆存储、Zone Map 裁剪、与规划器集成的向量检索,以及一种“面向事实(fact-shaped)”的 GraphRAG 查询接口。
仓库:
版本发布:
pg_sorted_heap 是一个 PostgreSQL 扩展,主要提供:
sorted_heap:一种表访问方法(Table Access Method),按主键让行在物理上保持有序,并通过“每页 zone map”对堆块进行裁剪。sorted_hnsw:与规划器集成的 HNSW 索引访问方法,面向 PostgreSQL 内置的向量类型。svec 与 hsvec:PostgreSQL 的 float32 / float16 向量类型。存储侧主要面向物理局部性很关键的负载:时序数据、事件日志、IoT 读数、有序 ID,以及在主键列上大量使用范围谓词的大表。
向量与 GraphRAG 侧主要面向希望把检索留在 PostgreSQL 内部的应用,而不是再引入一个独立的向量检索 sidecar。
0.13.0 的主要变化是:狭义且“面向事实”的 GraphRAG 合约(contract)现在成为稳定版本的一部分。
稳定的 GraphRAG API 包括:
sorted_heap_graph_rag(...)sorted_heap_graph_register(...)sorted_heap_graph_config(...)sorted_heap_graph_unregister(...)sorted_heap_graph_rag_stats()sorted_heap_graph_rag_reset_stats()该合约刻意保持“窄接口”,面向以 (entity_id, relation_id, target_id) 聚簇(clustered)的事实表,或通过等价的已注册别名映射实现同样语义。查询流程从 ANN 种子检索开始,沿着一条或多条关系边进行扩展,随后对扩展后的候选集进行精确重排(exact rerank)。
示例:
sql
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'
);
0.13.0 还为多分片/多租户应用流程提供了一个稳定的“路由式(routed)”GraphRAG 入口:
sorted_heap_graph_route(...)sorted_heap_graph_route_plan(...)这使得应用可以通过一个统一的调度器处理精确键路由、范围路由、profiles、策略与默认值。
0.13.0 还包括:
sorted_hnsw 在共享缓存、多索引负载下的正确性问题。sorted_hnsw.build_sq8:可选的低内存索引构建模式,适用于资源受限的构建环境。以下为发布说明中的特定负载基准快照,并非通用性能结论。
AWS Gutenberg 负载(约 104K x 2880D,top-10):
sorted_hnsw (svec):1.287 ms,100.0% Recall@10sorted_hnsw (hsvec):1.404 ms,100.0% Recall@10halfvec:2.031 ms,99.8% Recall@10AWS 面向事实的多跳 GraphRAG 负载(5K chains,384D):
sorted_heap_expand_twohop_path_rerank():中位数 0.962 mssorted_heap_graph_rag_twohop_path_scan():中位数 1.025 ms1.434 ms3.355 ms要求:
PATH 中可找到 pg_config从源码构建:
bash
git clone https://github.com/skuznetsov/pg_sorted_heap.git
cd pg_sorted_heap
make
make install
启用扩展:
sql
CREATE EXTENSION pg_sorted_heap;
升级已有安装:
sql
ALTER EXTENSION pg_sorted_heap UPDATE TO '0.13.0';
创建一张物理有序表:
```sql CREATE TABLE events ( id bigint PRIMARY KEY, ts timestamptz, payload text ) USING sorted_heap;
SELECT sorted_heap_compact('events'::regclass); ```
创建一个与规划器集成的 HNSW 索引:
```sql 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; ```
创建一张稳定的“面向事实”的 GraphRAG 表:
```sql 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); ```
0.13.0 的 RC 检查包括:
pg_sorted_heap / sorted_hnsw / graph_rag 的 SQL 回归测试覆盖pg_upgrade 覆盖sorted_hnsw 分块/共享缓存集成检查本地验证:
bash
make test-release
更聚焦的 GraphRAG 发布包验证:
bash
make test-graphrag-release