pgvector vs Qdrant vs ChromaDB vs Weaviate in 2026
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
- Best vector database 2026 — broader roundup
- 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