Blog

📝 NPBlue Blog 9 articles

Long-form takes on cloud, data, payments, and the technology business — practitioner perspectives you won't find paraphrased from the docs.

Vector Database Showdown: Pinecone vs pgvector vs Qdrant for Production RAG

Every RAG tutorial picks a vector store in one line and moves on to the interesting part — chunking, reranking, prompt templates. That’s fine for a demo. In production, the vector store choice is the decision you’ll live with longest, because migrating embeddings at scale is expensive and re-indexing under load is worse. Here’s the comparison that actually matters once you’re past the prototype.


The Three Real Options (Not the Ten Marketing Options)

Pinecone — managed, serverless, zero ops. You pay for convenience and get it: no cluster to size, no upgrade windows, built-in metadata filtering that scales.

pgvector — an extension on Postgres you’re probably already running. No new system to operate, transactional consistency with your existing data, and joins between vector search results and relational data in a single query.

Qdrant — a purpose-built vector engine, open-source with a managed cloud option. Sits between the two: more vector-search-specific performance and features than pgvector, more operational control (and responsibility) than Pinecone.

The Dimension That Actually Decides This: Where Does Your Data Already Live?

Benchmarks show all three handling millions of vectors with sub-100ms p99 latency at reasonable configurations — recall and speed are not where this decision should be made for most teams. The decision is about data gravity and operational surface area.

If your source-of-truth data is already in Postgres (user records, documents, permissions), pgvector wins by default. Storing embeddings next to the rows they describe means a single query can filter by WHERE user_id = ? AND embedding <=> $query < 0.3, with the database’s own query planner handling both the relational and vector work together. You lose some raw vector-search throughput at very large scale (100M+ vectors is where dedicated engines pull ahead), but for the overwhelming majority of RAG applications — internal knowledge bases, customer support, document Q&A — that ceiling is far above what you’ll hit.

If you have no existing Postgres investment and want to minimize operational headcount, Pinecone is the correct default. Serverless pricing means you’re not paying for idle capacity between traffic spikes, and the lack of infrastructure to manage matters more than people expect once there’s an on-call rotation involved.

If you need vector-search-specific features Postgres doesn’t have — hybrid dense+sparse search, quantization options for cost control at scale, or you’re already comfortable running open-source infra and want to avoid per-query managed pricing — Qdrant is the right shape. It’s also the easiest of the three to self-host for compliance-sensitive environments that can’t send embeddings to a third party at all.

The Migration Trap Nobody Mentions

Embedding models change. When you upgrade from text-embedding-3-small to whatever ships next, every vector in the store needs re-embedding — there’s no in-place conversion. This is a full re-index, not a schema migration, regardless of which store you picked.

The practical implication: don’t over-invest in vector-store-specific features (custom scoring functions, proprietary hybrid search syntax) that make a future migration harder than it needs to be. Keep the embedding generation pipeline decoupled from the store itself — a re-embed job that reads from your source documents and writes to a new index, swapped in atomically, should be a routine operation, not a quarter-long project.

A Practical Default

For a team building their first production RAG system with an existing Postgres database: start with pgvector. It removes a system to operate, and Postgres’s EXPLAIN ANALYZE on a hybrid vector+relational query gives you real operational visibility that most vector-specific tools still don’t match. Migrate to Qdrant or Pinecone only when you’ve measured a concrete ceiling — query latency at your real p99 traffic, not a benchmark — that pgvector actually hits.


The right vector database is rarely the one with the best recall@10 on a public benchmark. It’s the one that fits the data you already have and the operational team you already have. Optimize for that first.

Was this helpful?

Questions & Comments

Loading comments…