Skip to content

VectorChord 1.1.1 · PostgreSQL 13–18 · Successor to pgvecto.rs

Scalable Vector SearchBuilt for PostgreSQL

Store 400,000 vectors per $1 and index 100 million vectors in 20 minutes. Powered by RaBitQ 4-bit/8-bit quantization, disk-friendly IVF (vchordrq), high-QPS graphs (vchordg), MaxSim multi-vector retrieval, and native pgvector compatibility.

Forked from tensorchord/VectorChord · Maintained by Pigsty · Dual-licensed Apache-2.0 / AGPL-3.0

What’s new in VectorChord 1.1

Proven at 100M+ Scale

Enterprise vector scale at a fraction of the RAM

Benchmarks on GIST-1M, Cohere-10M, and LAION-100M against HNSW and commercial vector databases.

400k / $1Vectors per dollar26x more vectors stored per $1 on AWS vs pgvector HNSWView benchmark
20 min100M index buildExternal index precomputation or 6x faster in-DB buildView benchmark
16×Faster insert throughputMinimal write amplification compared to in-memory HNSWView benchmark
95%+Recall@10 accuracyGuaranteed theoretical error bounds with RaBitQ4 and RaBitQ8View benchmark

Core Engine Architecture

Designed for disk, memory, and hybrid retrieval

VectorChord pairs SIGMOD'24 RaBitQ quantization with PostgreSQL’s native storage, WAL, and buffer manager.

01 / VCHORDRQ · DISK-FRIENDLY IVF

Store 100M+ vectors without exhausting RAM

◇ Hierarchical K-Means + RaBitQ 4-bit / 8-bit Quantization

  • Compresses 32-bit float vectors by 8× to 32× with mathematically bounded distance estimation error
  • Only compact centroids stay in memory; quantized inverted lists stream from SSD with io_uring / posix_fadvise prefetching
  • Supports external multi-node or GPU index precomputation for 100M+ vectors with zero production CPU contention

Scale to hundreds of millions of vectors on a 32 GB PostgreSQL node.

vchordrq.sql
-- Enable VectorChord (auto-loads pgvector)
CREATE EXTENSION IF NOT EXISTS vchord CASCADE;
-- Build a hierarchical RaBitQ index
CREATE INDEX items_emb_idx ON items
  USING vchordrq (embedding vector_l2_ops)
  WITH (options = $$
    residual_quantization = true
    [build.internal]
    lists = [4096]
  $$);

02 / VCHORDG · HIGH-QPS GRAPH

Low-latency graph search without HNSW bloat

◇ Single-layer RaBitQ graph index for latency-critical workloads

  • Eliminates multi-layer HNSW memory overhead while delivering 2×–5× higher QPS and lower p99 latency
  • Up to 50% smaller index footprint and 4× faster index construction than pgvector HNSW
  • First-class support for vector, halfvec, and vector[] multi-vector embeddings

Drop-in replacement when your working set fits in memory and QPS is paramount.

vchordg.sql
-- High-QPS graph index with RaBitQ8
CREATE INDEX items_graph_idx ON items
  USING vchordg (embedding vector_ip_ops)
  WITH (options = $$
    m = 32
    ef_construction = 64
     alpha = [1.0, 1.2]
    bits = 8
  $$);

03 / MAXSIM · MULTI-VECTOR COLBERT

Late-interaction ColBERT & ColPali in SQL

◇ Native vector[] indexing with WARP dynamic pruning

  • First PostgreSQL extension to natively index vector[] token-level document embeddings with @# (MaxSim)
  • Implements WARP (Web-scale Accelerated Residual Pruning) over RaBitQ centroids to skip irrelevant token comparisons
  • Powers multimodal PDF/visual document retrieval with ColPali and fine-grained text retrieval with ColBERTv2

Up to 70% higher retrieval accuracy on complex domain queries without external reranking clusters.

maxsim_colbert.sql
-- Store per-token embeddings as vector(128)[]
CREATE TABLE docs (id bigserial, embs vector(128)[]);
CREATE INDEX ON docs USING vchordrq (embs vector_maxsim_ops)
  WITH (options = $$ [build.internal] lists = [1000] $$);
-- Query with the MaxSim (@#) operator
SELECT id FROM docs
  ORDER BY embs @# ARRAY['[0.1, ...]']::vector[]
  LIMIT 10;

04 / HYBRID SEARCH · BM25 + RRF

Complete retrieval suite inside PostgreSQL

◇ Combine VectorChord, VectorChord-bm25, and pg_tokenizer.rs

  • VectorChord-bm25: Block-WeakAnd (WAND) BM25 inverted index delivering 3× faster lexical top-K than ParadeDB
  • pg_tokenizer.rs: multilingual tokenizers (BERT, HuggingFace, Lindera Japanese, Jieba Chinese, Snowball)
  • Fuse dense semantic search and BM25 keyword scores in one SQL query via Reciprocal Rank Fusion (RRF) or ColBERT reranking

Keep relational data, vector search, and full-text BM25 in one transactional database.

Documentation Sections

Explore the complete VectorChord documentation

Everything from quickstart SQL and production tuning to deep-dive engineering articles, cloud administration, and legacy pgvecto.rs references.

Core Engine · v1.1.1

VectorChord Documentation

Installation, vchordrq & vchordg indexing, MaxSim multi-vector search, range queries, performance tuning, external index builds, and SQL reference.

Open section

37 Articles & Release Notes

Engineering Blog & Releases

Deep dives on RaBitQ quantization, 100M–1B vector benchmarks, DiskANN vs HNSW, BM25 Block-WAND, ColBERT WARP, and all release notes.

Open section

Performance & TCO

Benchmarks & Cost Analysis

Reproducible benchmarks across GIST-1M, Cohere-10M, and LAION-100M comparing VectorChord with pgvector, pgvectorscale, Elasticsearch, and Qdrant.

Open section

RAG · BM25 · ColBERT

Use Cases & Hybrid Search

End-to-end recipes for hybrid dense + BM25 search with Reciprocal Rank Fusion, ColBERTv2 reranking, and 5x pgvector memory compression.

Open section

Managed Service Reference

VectorChord Cloud Docs

Reference documentation for VectorChord Cloud clusters, connection pooling, scaling, VPC peering, monitoring metrics, and backup administration.

Open section

Predecessor Reference

pgvecto.rs Archive & Migration

Complete historical documentation for pgvecto.rs (v0.1–v0.4) plus step-by-step migration guides to move existing deployments to VectorChord.

Open section

Quick Start

Run VectorChord in three steps

Start a local container or install native packages via Pigsty, enable the extension, and run your first similarity search.

  1. Start PostgreSQL with VectorChord

    Launch the prebuilt Docker image (includes both vchord and pgvector), or install via Pigsty / packages.

    docker run -d --name vchord -e POSTGRES_PASSWORD=postgres -p 5432:5432 tensorchord/vchord-postgres:pg18-v1.1.1
  2. Enable the extension

    Connect with psql and enable vchord (CASCADE automatically enables vector).

    psql -h 127.0.0.1 -U postgres -c "CREATE EXTENSION IF NOT EXISTS vchord CASCADE;"
  3. Create a vchordrq index & query

    Index your vector or halfvec column using vchordrq and query with standard <->, <#>, or <=> operators.

    psql -h 127.0.0.1 -U postgres -c "CREATE INDEX ON items USING vchordrq (embedding vector_l2_ops);"

Frequently Asked Questions

Understanding VectorChord & pgsty/vchord

How does VectorChord relate to pgvector and pgvecto.rs?

VectorChord is the next-generation successor to pgvecto.rs, redesigned around SIGMOD'24 RaBitQ quantization and PostgreSQL’s native page storage and WAL replication. Unlike pgvecto.rs, VectorChord uses pgvector’s standard vector and halfvec data types and <->, <#>, <=> operators directly, so existing pgvector applications can switch indexes (USING vchordrq or USING vchordg) without rewriting queries. See the Migration Guide.

When should I choose vchordrq versus vchordg?

Choose vchordrq (RaBitQ Inverted File) for large datasets (1M to 100M+ vectors), cost-sensitive deployments, high insert/update throughput, or when your vectors exceed available RAM. Choose vchordg (RaBitQ Graph) when your dataset fits comfortably in memory and you need maximum QPS and ultra-low single-query latency without HNSW’s multi-layer memory overhead. Compare both in the Indexing Guide.

What is RaBitQ, and why is RaBitQ8 added in VectorChord 1.1?

RaBitQ (Randomized Bit Quantization) compresses 32-bit floating-point vectors into compact 4-bit (bits = 4, default) or 8-bit (bits = 8) representations with a sharp theoretical error bound and hardware-accelerated SIMD inner-product estimation. While 4-bit RaBitQ is ideal for most workloads, RaBitQ8 provides near-lossless accuracy before reranking for tightly clustered or highly skewed vector distributions. Read the RaBitQ & IVF deep dive.

Why did Pigsty fork VectorChord as pgsty/vchord?

pgsty/vchord and vchord.pgsty.com are maintained by the Pigsty community to ensure long-term open-source continuity, reproducible RPM/DEB packaging across PostgreSQL 13–18 on Enterprise Linux, Debian, and Ubuntu, and a complete, fast, local-first documentation and engineering archive. See Attribution.

Ready to scale vector search in PostgreSQL?Follow the Getting Started guide, explore the SQL reference, or read the engineering blog.