Skip to content
Guide · Build

Vector database comparison: pgvector, Milvus, Pinecone, Qdrant and Weaviate

Five credible options, one decision. This guide compares them on the criteria that actually decide the choice and gives you a decision tree you can defend in an architecture review.

Updated 6 Nov 2026 · 9 min read · By Teksmobile AI practice

Why this choice matters less, and more, than you think

A vector database stores the embeddings of your documents and finds the nearest ones to a query. Every serious option does that well. If your RAG system performs badly, the vector store is rarely the reason. Chunking, embeddings and retrieval logic matter far more, as we explain in RAG explained.

So why does the choice matter at all? Because it decides three things you will live with for years: where your data physically sits, who carries the operational burden, and how much friction you face when the collection grows tenfold. Those are infrastructure decisions, and infrastructure decisions are expensive to reverse.

Our position is simple. Start with the least new infrastructure that meets the requirements, and only add a dedicated engine when a specific requirement forces you to. For most teams that means starting with PostgreSQL.

The criteria that actually decide it

Vendor comparison pages list dozens of features. In practice, six questions settle the decision.

  • Scale. How many vectors, at what dimensionality, growing how fast? A few million vectors fit on one well-sized database node. Hundreds of millions do not.
  • Latency and concurrency. Is this an internal tool with a handful of users or a customer-facing product with thousands of concurrent queries and a strict response budget?
  • Filtering. Will almost every query carry filters such as tenant, permission group, date or document type? Filtered search is where engines differ most in practice.
  • Hybrid search. Do you need keyword and vector results merged in one query? Hybrid search is close to mandatory for anything with product codes, names or legal references.
  • Hosting and residency. Must data stay in a specific region or on your own hardware? That rules managed-only services in or out immediately.
  • Operations. Who upgrades it, backs it up, monitors it and gets paged at 3 a.m.? A distributed engine is a real system to run.

Notice what is absent: raw query speed on a public benchmark. Benchmarks measure a configuration you will not run, on data you do not have. Measure on your own queries or not at all.

A decision tree

The tree below is how we start most conversations. It is deliberately biased towards less infrastructure.

Decision tree: if you already run PostgreSQL and the collection fits one node, choose pgvector; if you want a fully managed service, choose Pinecone; if the collection is very large or latency is strict, choose Milvus; otherwise choose Qdrant or Weaviate Already running PostgreSQL? Want it fully managed, zero operations? Very large collection or strict latency? Fits one node with room to grow? Pinecone or a managed cloud of the others Milvus distributed, self-host or managed pgvector inside the database you already run Qdrant or Weaviate rich filtering, hybrid built in Yes No Yes No Yes No Yes No
The tree is biased towards running less new infrastructure. "Very large" means the index no longer fits comfortably on one node you are happy to operate.

Two caveats. First, "fully managed" is available for every option on this page through a vendor cloud, so the Pinecone branch really means "I want a service, not a system". Second, every branch assumes you have an embedding model chosen already; the database does not fix a poor one.

The five contenders

pgvector

An open-source extension that adds vector columns, distance operators and approximate indexes to PostgreSQL. Its strength is that it is not a new system. Vectors sit next to the rows they describe, filters are ordinary WHERE clauses, backups and permissions already exist, and full-text search gives you hybrid retrieval with a join. Its limit is the limit of a single database node; past that you are sharding PostgreSQL, which is not what it was built for. We cover sizing in our pgvector service.

Milvus

An open-source, distributed vector engine designed for very large collections. It separates storage from compute, supports several index types and scales horizontally. It is also a genuine distributed system with several components, so it needs operational investment or a managed offering. We reach for it when the collection or the latency target has outgrown everything simpler, and describe that work on our Milvus page.

Pinecone

A fully managed service with no self-hosted option. You get an API, metadata filtering, namespaces for tenancy and none of the operations. The trade-offs are the usual ones for managed services: your data lives in the vendor's cloud in the regions they offer, costs scale with usage, and you cannot run it inside your own perimeter. Right for teams that want to spend engineering time elsewhere; see our Pinecone page.

Qdrant

An open-source engine written for filtered vector search. Its payload filtering is expressive and efficient, it supports sparse vectors for hybrid retrieval, and it runs as a single binary or a cluster, self-hosted or managed. It is a good middle ground when PostgreSQL is not the answer but a full distributed deployment is more than you need.

Weaviate

An open-source engine with hybrid search built into the query layer, native multi-tenancy and an optional module system that can call embedding models for you. It suits teams that want keyword and vector retrieval merged by default and value the richer object model. Self-host or managed. We cover both in Qdrant and Weaviate.

Side by side

The table summarises how we characterise each option in client work. It reflects typical deployments rather than every feature a vendor lists.

CriterionpgvectorMilvusPineconeQdrantWeaviate
Hosting modelAny PostgreSQLSelf-host or managedManaged onlySelf-host or managedSelf-host or managed
Comfortable scaleSingle nodeVery large, distributedLarge, vendor-managedLarge, cluster optionLarge, cluster option
FilteringFull SQLScalar filtersMetadata filtersRich payload filtersProperty filters
Hybrid searchVia full-text search + joinSparse + denseSparse + denseSparse + denseBuilt into queries
Ops burdenNone extraHigh when self-hostedNoneModerateModerate
Data stays in your perimeterYesYes (self-host)NoYes (self-host)Yes (self-host)
Best fitMost internal knowledge basesVery large or latency-critical productsSmall teams, no ops capacityHeavily filtered searchHybrid-first search

Feature sets move quickly in this market, so treat the table as a starting position and verify current capabilities before you commit. The questions in the criteria section change far more slowly than the products.

Pitfalls we see

Mistakes that cost months

Choosing on a benchmark. A leaderboard figure for one million synthetic vectors says nothing about your filtered, multi-tenant queries. Load your own data and run your own questions.

Ignoring filtered search. Teams test unfiltered similarity, then discover that "only this customer's documents" makes the index behave very differently. Test with the filters you will use in production.

Adding a distributed engine for a small corpus. Running a multi-component cluster for fifty thousand chunks is pure cost. Start with the database you have.

Letting the vector store become the system of record. If the only copy of chunk text and metadata lives in the vector database, you cannot re-embed, migrate or audit. Keep the source of truth elsewhere.

Forgetting the re-embedding bill. Changing embedding model means re-indexing everything. That cost is independent of the database but is often blamed on it.

Plan for migration from day one

Whatever you pick, assume you will change it. Collections grow, vendors change pricing models, residency rules tighten. Three habits keep that change cheap.

First, keep chunks and metadata in a store you control, such as the same PostgreSQL or an object store, and treat the vector index as derived data. Second, put retrieval behind one interface in your code so that swapping engines touches a single module. Third, keep the evaluation set from evaluating LLM outputs current, so you can prove the new engine returns the same passages before you cut over.

Done this way, a migration from pgvector to Milvus is a re-index and a regression run. Done the other way, it is a rewrite with a weekend of downtime.

Our default recommendation

Start on pgvector unless one of the branches in the tree forces you elsewhere. Build the retrieval layer, the hybrid search and the evaluation set on it. If the collection or the latency target outgrows a single node, move to Milvus or a managed engine with that evidence in hand. The teams who regret their vector database choice are almost always the ones who chose a large system for a small problem, not the reverse.

If you want the decision made against your actual numbers, our vector database selection engagement does exactly that, usually in a week.

Key takeaways

  • Every credible vector database finds nearest neighbours well; the decision is about scale, hosting and operations.
  • Six questions decide it: scale, latency, filtering, hybrid search, residency, and who runs it.
  • pgvector is the right default for most teams already on PostgreSQL.
  • Milvus earns its complexity only at very large scale or strict latency targets.
  • Pinecone trades control for zero operations; Qdrant and Weaviate sit between.
  • Test with your own data and your production filters, never with a public benchmark.
  • Keep chunk text outside the vector store and retrieval behind one interface so you can migrate.
FAQ

Frequently asked questions

Is pgvector good enough for production RAG?

For most knowledge bases, yes. It runs inside the PostgreSQL you already operate, supports approximate indexes, and lets you filter with ordinary SQL. It stops being the right answer when a single database node can no longer hold the index comfortably or when query latency targets are tight under heavy load. See our pgvector service.

Do I need a vector database at all?

If your corpus is a few hundred pages, you may not. Put the text in the prompt or use a simple in-memory index. A vector database earns its place when the collection is large, changes often, must be filtered by tenant or permission, or must serve many concurrent users.

Can I switch vector databases later?

Yes, if you planned for it. Keep chunk text and metadata in a system of record you control, wrap the vector store behind a thin retrieval interface, and keep your evaluation set. A migration then becomes a re-index and a regression run rather than a rewrite.

Which vector database do you recommend most often?

pgvector, because most clients already run PostgreSQL and their collections fit comfortably. We recommend Milvus for very large or latency-critical workloads, Pinecone when a team wants zero operations, and Qdrant or Weaviate when filtering and built-in hybrid search matter and self-hosting is acceptable. Our interactive chooser walks through the same logic.

Ready to make AI work in production?

Tell us about your systems, your data and your constraints. We reply within one business day with a straight answer and a suggested next step.