Lanzamiento de pg_sorted_heap 0.13.0
Me complace anunciar el lanzamiento de pg_sorted_heap 0.13.0, una extensión de PostgreSQL para almacenamiento en heap ordenado físicamente, eliminación de mapas de zonas, búsqueda vectorial integrada en el planificador y una interfaz de consulta de GraphRAG con estructura de hechos compacta.
Repositorio:
https://github.com/skuznetsov/pg_sorted_heap
Versión:
https://github.com/skuznetsov/pg_sorted_heap/releases/tag/v0.13.0
¿Qué es pg_sorted_heap?
pg_sorted_heap es una extensión de PostgreSQL que incorpora:
sorted_heap: un método de acceso a tablas que mantiene los registros físicamente ordenados según la clave primaria y depura los bloques heap utilizando mapas de zona por página.sorted_hnsw: un método de acceso a índices HNSW integrado con el planificador, diseñado para tipos vectoriales integrados.svecyhsvec: tipos de datos vectoriales en formato float32 y float16 para PostgreSQL.- Herramientas GraphRAG con estructuras de hechos, que permiten recuperar y reclasificar datos con forma de grafo directamente dentro de PostgreSQL.
El componente de almacenamiento está orientado a cargas de trabajo en las que la localidad física es relevante: datos de series temporales, registros de eventos, lecturas de IoT, identificadores ordenados y tablas de gran tamaño con predicados de rango en columnas de clave primaria.
La parte de vectores y GraphRAG está dirigida a aplicaciones que buscan realizar la recuperación de información directamente dentro de PostgreSQL, sin necesidad de incorporar un sistema adicional de búsqueda vectorial.
¿Qué hay de nuevo en 0.13.0?
La principal novedad de la versión 0.13.0 es que la interfaz compacta de GraphRAG con estructura de hechos ahora forma parte de la API estable.
La API estable de GraphRAG incluye:
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()
Esta interfaz es intencionalmente compacta. Está diseñada para tablas de hechos organizadas por (entity_id, relation_id, target_id), o mediante un alias equivalente previamente registrado. Las consultas comienzan con una recuperación inicial mediante ANN, luego se expanden a través de una o varias relaciones y finalmente se reordenan con precisión los candidatos obtenidos.
Por ejemplo:
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' );
La versión 0.13.0 también añade un punto de acceso estable de GraphRAG para flujos de aplicaciones multi-shard o multi-tenant:
sorted_heap_graph_route(...)sorted_heap_graph_route_plan(...)
Con ello, las aplicaciones disponen de un único mecanismo de despacho para el enrutamiento por claves exactas, enrutamiento por rangos, perfiles, políticas y valores por defecto.
Más novedades destacadas
La versión 0.13.0 también incluye:
- Registro de esquemas para tablas de hechos no canónicas, de modo que GraphRAG pueda utilizarse con nombres de columnas ya existentes.
- Estadísticas de etapas de GraphRAG a nivel backend: conteo de seeds, registros expandidos, rerankeados, y retornados y tiempos por etapa.
- Mayor robustez del ciclo de vida en escenarios de actualización de extensiones, dump/restore, recuperación ante caídas, compactación online concurrente y merge online concurrente
- Una corrección de consistencia de caché compartida para cargas multiíndice con
sorted_hnsw. sorted_hnsw.build_sq8, un modo opcional de construcción de índices de bajo consumo de memoria para builders con recursos limitados.- Un canal experimental de recuperación FlashHadamard. Aunque está documentado y validado mediante pruebas, no constituye la ruta ANN predeterminada ni forma parte de la interfaz estable de GraphRAG.
Instantáneas de benchmarks
Estos son resultados puntuales de benchmarks específicos de cada carga de trabajo tomados de las notas de la versión, no afirmaciones universales de rendimiento.
Carga de trabajo AWS Gutenberg, aproximadamente 104K x 2880D, top-10:
sorted_hnsw (svec):1.287 ms,100.0% Recall@10sorted_hnsw (hsvec):1.404 ms,100.0% Recall@10- pgvector
halfvec:2.031 ms,99.8% Recall@10
Carga de trabajo AWS GraphRAG multihop con estructura basada en hechos, 5K cadenas, 384D:
sorted_heap_expand_twohop_path_rerank(): mediana de0.962 mssorted_heap_graph_rag_twohop_path_scan(): mediana de1.025 ms- registro de paridad con pgvector: mediana de
1.434 ms - registro de paridad con Qdrant: mediana de
3.355 ms
Instalación
Requisitos:
- PostgreSQL 17 o 18
- Cadena de herramientas estándar de compilación PGXS con
pg_configenPATH
Compilar desde el código fuente:
git clone https://github.com/skuznetsov/pg_sorted_heap.git cd pg_sorted_heap make make install
Activar la extensión:
CREATE EXTENSION pg_sorted_heap;
Actualizar una instalación ya existente:
ALTER EXTENSION pg_sorted_heap UPDATE TO '0.13.0';
Ejemplos mínimos
Crear una tabla físicamente ordenada:
CREATE TABLE events ( id bigint PRIMARY KEY, ts timestamptz, payload text ) USING sorted_heap; SELECT sorted_heap_compact('events'::regclass);
Crear un índice HNSW integrado con el optimizador de consultas:
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;
Crear una tabla GraphRAG estable con estructura de hechos:
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);
Validación
Las pruebas incluidas en la versión candidata 0.13.0 incluyen:
- Pruebas de regresión SQL para
pg_sorted_heap,sorted_hnsw, ygraph_rag - Validación del ciclo de vida de GraphRAG para actualización y exportación/restauración
- Pruebas de recuperación ante caídas
- Pruebas de operaciones concurrentes en línea
- Compatibilidad de
pg_upgradede PostgreSQL 17 a 18 - Pruebas de integración de
sorted_hnswcon caché compartida y procesamiento segmentado
Para validación local:
make test-release
Para el paquete de lanzamiento reducido de GraphRAG:
make test-graphrag-release
Enlaces
- Repositorio: https://github.com/skuznetsov/pg_sorted_heap
- Documentación: https://skuznetsov.github.io/pg_sorted_heap/
- Notas de la versión: https://github.com/skuznetsov/pg_sorted_heap/releases/tag/v0.13.0
- Issues: https://github.com/skuznetsov/pg_sorted_heap/issues

