We compared vector databases with a simple method: identical 1M-document corpus, identical query set, the same RAG application behind each engine. Metrics: recall@10, p95 latency, and operator hours per system. Candidates: pgvector, Qdrant, and Pinecone.

pgvector: Postgres carries you into millions of vectors

pgvector runs inside PostgreSQL. SQL joins between vectors and relational rows come free, the HNSW index performs well into several million vectors, and things degrade near 50M. IVFFlat exists as an alternative, but HNSW won every scenario we tested. A team operating Postgres adds zero infrastructure: backups, replication, and monitoring stand ready.

Qdrant: fast filters and memory control

A Rust engine with the fastest filtered searches in the group. Scalar and binary quantization shrink memory consumption 4x to 32x, which changes machine sizing across the board. Run it self-hosted or on the managed cloud; the middle ground between control and convenience lives here.

Pinecone: renting simplicity

Serverless end to end, nothing to patch, an on-call rotation that sleeps through the night. The bill scales with vector dimension and throughput, and traffic spikes sting. Teams without DevOps capacity get value from the premium; teams with their own infrastructure feel it month after month.

Numbers at three scales

  • 100k vectors: all three tied above 0.95 recall@10; latency drops out of the picture at this size
  • 1M vectors: pgvector with HNSW (m=16, ef_construction=64) held p95 under 50ms; Qdrant with scalar quantization marked ~30ms on half the RAM
  • 20M vectors: pgvector demanded aggressive tuning and per-tenant partitioning; Qdrant stayed stable; Pinecone scaled without intervention, carrying the largest monthly bill of the three

How to decide

A Postgres shop under 10M vectors takes pgvector. Heavy metadata filtering (tenant, permission, date) takes Qdrant. Zero DevOps capacity takes Pinecone. Past that, taste decides.

The migration trap

Embeddings bind to the model that created them. Switching vendors forces a full corpus re-embed, and compute is the smaller half of the cost: recall shifts, thresholds need recalibration, evals rerun. Budget for it from day one, including in contracts with your current vendor.