ruvnet/ruvector-postgres

By ruvnet

Updated 5 days ago

Advanced PostgreSQL vector extension. pgvector replacement with 53+ SQL functions, SIMD, GNN.

Image
2

1.1K

ruvnet/ruvector-postgres repository overview

RuVector-Postgres

The most advanced PostgreSQL vector database extension. A high-performance, drop-in replacement for pgvector with 53+ SQL functions, SIMD acceleration, 39 attention mechanisms, Graph Neural Networks, hyperbolic embeddings, and self-learning capabilities.

Quick Start

# Start RuVector-Postgres
docker run -d --name ruvector \
  -e POSTGRES_PASSWORD=secret \
  -p 5432:5432 \
  ruvnet/ruvector-postgres:latest

# Connect and use
psql -h localhost -U ruvector -d ruvector_test

# Create extension
CREATE EXTENSION ruvector;

Why RuVector vs pgvector?

FeaturepgvectorRuVector-Postgres
Vector SearchHNSW, IVFFlatHNSW, IVFFlat (optimized)
Distance Metrics38+ (including hyperbolic)
Attention MechanismsNone39 types (scaled-dot, multi-head, flash, sparse)
Graph Neural NetworksNoneGCN, GraphSAGE, GAT
Hyperbolic EmbeddingsNonePoincare, Lorentz (for hierarchies)
Sparse VectorsPartialFull support + BM25
Self-LearningNoneReasoningBank (adaptive search)
Agent RoutingNoneTiny Dancer (11 functions)
Graph/CypherNoneFull support
SIMD AccelerationPartialFull AVX-512/NEON
QuantizationNoneScalar, Product, Binary

Features

Core Vector Operations
  • L2, Cosine, Inner Product, Manhattan distances
  • Vector normalization, addition, scalar multiplication
  • SIMD-accelerated (AVX2/AVX-512/NEON)
Hyperbolic Embeddings

Perfect for hierarchical data (taxonomies, org charts, knowledge graphs):

SELECT ruvector_poincare_distance(a, b, -1.0);
SELECT ruvector_mobius_add(a, b, -1.0);
Sparse Vectors & BM25

Full sparse vector support with text scoring:

SELECT ruvector_sparse_dot(a, b);
SELECT ruvector_bm25_score(query, doc_freqs, doc_len, avg_len, total);
39 Attention Mechanisms

Transformer-style attention in PostgreSQL:

SELECT ruvector_attention_scaled_dot(query, keys, values);
SELECT ruvector_attention_multi_head(query, keys, values, 8);
Graph Neural Networks

GNN inference directly in PostgreSQL:

SELECT ruvector_gnn_gcn_layer(features, adjacency, weights);
SELECT ruvector_gnn_graphsage_layer(features, neighbors, weights);
Self-Learning (ReasoningBank)

Adaptive search parameter optimization:

SELECT ruvector_record_trajectory(input, output, success, context);
SELECT ruvector_adaptive_search(query, context, ef_search);
-- Create extension
CREATE EXTENSION ruvector;

-- Create table with vector column
CREATE TABLE documents (
    id SERIAL PRIMARY KEY,
    content TEXT,
    embedding ruvector(1536)
);

-- Insert some documents (embeddings from your ML model)
INSERT INTO documents (content, embedding) VALUES
    ('PostgreSQL is a powerful database', '[0.1, 0.2, ...]'),
    ('Vector search enables AI applications', '[0.3, 0.1, ...]');

-- Create HNSW index for fast search
CREATE INDEX ON documents USING ruhnsw (embedding ruvector_l2_ops)
WITH (m = 16, ef_construction = 64);

-- Search for similar documents
SELECT content, embedding <-> $query_embedding AS distance
FROM documents
ORDER BY distance
LIMIT 10;

Tutorial 2: Hybrid Search (Vector + BM25)

-- Combine vector similarity with text scoring
SELECT
    content,
    0.7 * (1.0 / (1.0 + embedding <-> $query_vector)) +
    0.3 * ruvector_bm25_score(terms, doc_freqs, length, avg_len, total) AS score
FROM documents
ORDER BY score DESC
LIMIT 10;

Tutorial 3: Knowledge Graph with Hyperbolic Embeddings

-- Hyperbolic embeddings preserve hierarchy better than Euclidean
-- Perfect for taxonomies, org charts, knowledge graphs

-- Create taxonomy table
CREATE TABLE taxonomy_nodes (
    id SERIAL PRIMARY KEY,
    name TEXT,
    parent_id INTEGER,
    embedding ruvector(128)  -- Poincare embeddings
);

-- Find similar nodes using hyperbolic distance
SELECT name, ruvector_poincare_distance(embedding, $query, -1.0) AS distance
FROM taxonomy_nodes
ORDER BY distance
LIMIT 10;

Tutorial 4: Multi-Agent Query Routing

-- Register AI agents with their capabilities
SELECT ruvector_register_agent('code_expert', ARRAY['coding', 'debugging'], $embedding);
SELECT ruvector_register_agent('math_expert', ARRAY['math', 'statistics'], $embedding);

-- Route user query to best agent
SELECT ruvector_route_query($user_query_embedding,
    (SELECT array_agg(row(name, capabilities)) FROM agents)
) AS best_agent;

Distance Operators

OperatorDistanceUse Case
<->L2 (Euclidean)General similarity
<=>CosineText embeddings
<#>Inner ProductNormalized vectors
<+>Manhattan (L1)Sparse features

Index Types

HNSW (Hierarchical Navigable Small World)
CREATE INDEX ON items USING ruhnsw (embedding ruvector_l2_ops)
WITH (m = 16, ef_construction = 64);

SET ruvector.ef_search = 100;  -- Tune search quality
IVFFlat
CREATE INDEX ON items USING ruivfflat (embedding ruvector_l2_ops)
WITH (lists = 100);

SET ruvector.ivfflat_probes = 10;

Performance

Operation10K vectors100K vectors1M vectors
HNSW Build0.8s8.2s95s
HNSW Search (top-10)0.3ms0.5ms1.2ms
Cosine Distance0.01ms0.01ms0.01ms

Environment Variables

VariableDefaultDescription
POSTGRES_USERruvectorDatabase user
POSTGRES_PASSWORDruvectorDatabase password
POSTGRES_DBruvector_testDefault database

CLI Tool

npm install -g @ruvector/postgres-cli

ruvector-pg install --method docker
ruvector-pg vector create table --dim 384 --index hnsw
ruvector-pg bench run --type all --size 10000

License

MIT License

Tag summary

Content type

Image

Digest

sha256:a25c776a9

Size

151.9 MB

Last updated

5 days ago

docker pull ruvnet/ruvector-postgres