These four are the most common vector databases for local RAG in 2026. They differ in operational complexity, feature set, and scale ceiling. This page helps you pick.
Overview
| pgvector | Qdrant | ChromaDB | Weaviate | |
|---|---|---|---|---|
| Type | Postgres extension | standalone Rust server | Python in-process or server | standalone Go server |
| First release | 2023 | 2021 | 2022 | 2019 |
| Best for | teams already on Postgres | production scale, low latency | local dev, prototyping | hybrid search, rich features |
| Single-node scale | 10M+ vectors | 100M+ vectors | 1M vectors | 50M+ vectors |
| Distributed | via Postgres itself | ✓ (Raft) | ✗ (single node) | ✓ (Raft) |
| License | PostgreSQL | Apache 2.0 | Apache 2.0 | BSD-3 |
| Embedding models | bring your own | bring your own | bundled + bring your own | bundled + bring your own |
| Hybrid search | partial (2026) | ✓ (BM25 + dense) | partial | ✓ (BM25 + dense + multi-vector) |
| Filters | SQL | rich | basic | rich |
| Multi-tenancy | via Postgres schemas | ✓ (collections + tags) | ✗ | ✓ |
When to use each
Choose pgvector when…
- You are already on Postgres for your application data. The vector store sits next to the rest of your data, no extra service to run.
- You want transactional consistency between metadata and vectors (rare, but sometimes needed).
- Your scale is <10M vectors and your queries are <100ms latency.
- You prefer operational simplicity (one database, not two).
Choose Qdrant when…
- You need production scale (10M–100M+ vectors) with sub-10ms p99 latency.
- You want rich filtering combined with vector search (e.g., “find docs about X for users in region Y created after date Z”).
- You need multi-tenancy for a SaaS product.
- You are willing to run a standalone service (one more thing to monitor).
Choose ChromaDB when…
- You are prototyping or building a personal RAG that fits in <1M vectors.
- You want zero-config setup (ChromaDB has an in-process mode that needs no server).
- You are using LangChain or LlamaIndex and want a drop-in default.
- You do not need multi-user, multi-tenant, or production scale.
Choose Weaviate when…
- You need the richest hybrid search (BM25 + dense + multi-vector + re-ranking).
- You are building a production RAG system with a team to operate it.
- You want built-in vectorization modules (any-to-any embeddings, automatic chunking).
- You need GraphQL or gRPC APIs in addition to REST.
Performance
On a single node (32 vCPU, 64GB RAM, 1M 768-dim vectors, top-10 ANN):
| DB | Recall@10 | p50 latency | p99 latency |
|---|---|---|---|
| pgvector (HNSW) | 0.95 | 12 ms | 38 ms |
| Qdrant (HNSW) | 0.97 | 4 ms | 9 ms |
| ChromaDB (HNSW) | 0.94 | 18 ms | 65 ms |
| Weaviate (HNSW + flat) | 0.96 | 8 ms | 22 ms |
Qdrant is the consistent performance leader. pgvector and Weaviate are close. ChromaDB is the slowest (Python overhead).
Setup with a local LLM
All four work with any OpenAI-compatible embedding endpoint, including Ollama, Mullama, llama.cpp, and LM Studio.
# Start an embedding model
ollama pull nomic-embed-text
ollama serve
# Then point your vector DB at it
export OPENAI_BASE_URL=http://localhost:11434/v1
export OPENAI_API_KEY=not-needed
ChromaDB (simplest)
import chromadb
from chromadb.utils import embedding_functions
client = chromadb.PersistentClient(path="./chroma")
ef = embedding_functions.OpenAIEmbeddingFunction(
api_base="http://localhost:11434/v1",
api_key="not-needed",
model_name="nomic-embed-text",
)
collection = client.get_or_create_collection("docs", embedding_function=ef)
collection.add(documents=["local llm is great"], ids=["1"])
Qdrant (production)
from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams
client = QdrantClient(host="localhost", port=6333)
client.create_collection("docs", vectors_config=VectorParams(size=768, distance=Distance.COSINE))
pgvector
CREATE EXTENSION vector;
CREATE TABLE docs (id bigserial PRIMARY KEY, content text, embedding vector(768));
CREATE INDEX ON docs USING hnsw (embedding vector_cosine_ops);
Weaviate
import weaviate
client = weaviate.Client("http://localhost:8080")
Decision matrix
| Your situation | Use |
|---|---|
| Already on Postgres | pgvector |
| Need sub-10ms p99 at scale | Qdrant |
| Personal RAG, <100k vectors | ChromaDB (in-process) |
| Production RAG with team | Weaviate or Qdrant |
| Multi-tenant SaaS | Qdrant |
| Rich hybrid search (vector + keyword + re-rank) | Weaviate |
| Want zero-config | ChromaDB |
| Want to minimize new services | pgvector |
| Need a managed cloud option later | Weaviate (best cloud) or Qdrant Cloud |
See also
- Local RAG chatbot guide — put a vector database to work
- pgvector tool page — full feature list
- Qdrant tool page — full feature list
- ChromaDB tool page — full feature list
- Weaviate tool page — full feature list
- Local RAG chatbot guide — full setup walkthrough