Skip to content
Reviews

Pinecone vs Weaviate vs Qdrant vs pgvector: Vector Database Comparison

How four vector databases compare on features, scaling, operations and cost, which fits your RAG pipeline, and when pgvector is enough.

M
Max Beech· Founder
··13 min read
Pinecone vs Weaviate vs Qdrant vs pgvector: Vector Database Comparison

Vector databases are the backbone of RAG pipelines, semantic search, and AI-powered recommendations. The four leading options - Pinecone, Weaviate, Qdrant, and pgvector - take different approaches to the same problem. This comparison walks through how each one performs, what it costs and where it fits.

Quick verdict

DatabaseBest forAvoid if
PineconeManaged simplicity, enterprise scaleBudget-constrained, self-hosting required
WeaviateHybrid search, complex queriesYou need maximum raw speed
QdrantPerformance-critical, self-hostingYou want zero ops overhead
pgvectorPostgres shops, moderate scaleHigh-volume semantic search

Our recommendation: Start with pgvector if you're already using Postgres - the operational simplicity outweighs performance differences for most use cases. Move to Qdrant for performance-critical applications or Pinecone when you need managed scale without ops burden.

How to benchmark them yourself

Published benchmarks rarely match your workload, so run your own before committing:

  • Dataset: Your own embeddings at realistic sizes (for example 1M, 10M and 100M vectors at 1536 dimensions)
  • Queries: A representative set of real search queries with varying top-k values
  • Metrics: Latency (p50, p95, p99), recall@10, throughput, cost
  • Hardware: Comparable cloud instances for self-hosted options

Pinecone

Overview

Pinecone is a fully managed vector database designed for production AI applications. You get a serverless API without infrastructure management.

Architecture

Pinecone uses a proprietary distributed architecture optimised for vector search:

import { Pinecone } from '@pinecone-database/pinecone';

const pinecone = new Pinecone({ apiKey: process.env.PINECONE_API_KEY });
const index = pinecone.index('my-index');

// Upsert vectors
await index.namespace('documents').upsert([
  {
    id: 'doc-1',
    values: embedding,
    metadata: { title: 'Example', category: 'tech' }
  }
]);

// Query
const results = await index.namespace('documents').query({
  vector: queryEmbedding,
  topK: 10,
  filter: { category: { $eq: 'tech' } },
  includeMetadata: true
});

Strengths

Zero ops: No servers to manage, no scaling to configure. It just works.

Global distribution: Multi-region replication with automatic failover.

Metadata filtering: Efficient filtered vector search without separate queries.

Enterprise features: SOC2, HIPAA, dedicated clusters for compliance needs.

Weaknesses

Cost at scale: Serverless pricing can surprise you. High-volume workloads get expensive.

Vendor lock-in: Proprietary API and infrastructure. Migration requires re-indexing.

Limited query flexibility: Pure vector search with metadata filters. No hybrid text search.

Cold start latency: Serverless indexes can have startup delays after idle periods.

Performance

Low, consistent latency and high recall, holding up well as datasets grow into the hundreds of millions of vectors.

Pricing

TierMonthly costNotes
StarterFreeLimited storage and usage
Standard (serverless)Usage-basedPay for storage, reads and writes
EnterpriseCustomDedicated infrastructure

Serverless pricing is metered by storage, read units and write units; check Pinecone's pricing page for current rates.

Weaviate

Overview

Weaviate is an open-source vector database with built-in machine learning modules. It emphasises hybrid search combining vectors with keyword matching.

Architecture

Weaviate uses a schema-based approach with native support for multiple search types:

import weaviate from 'weaviate-ts-client';

const client = weaviate.client({
  scheme: 'https',
  host: 'your-cluster.weaviate.network'
});

// Define schema
await client.schema
  .classCreator()
  .withClass({
    class: 'Document',
    vectorizer: 'text2vec-openai',
    properties: [
      { name: 'title', dataType: ['text'] },
      { name: 'content', dataType: ['text'] }
    ]
  })
  .do();

// Hybrid search (vector + keyword)
const results = await client.graphql
  .get()
  .withClassName('Document')
  .withHybrid({ query: 'machine learning', alpha: 0.5 })
  .withLimit(10)
  .withFields('title content _additional { score }')
  .do();

Strengths

Hybrid search: Native combination of vector and keyword search with configurable weighting.

Built-in vectorisation: Automatic embedding generation with OpenAI, Cohere, HuggingFace modules.

GraphQL API: Flexible query language for complex retrieval patterns.

Open source: Self-host for data sovereignty or use managed Weaviate Cloud.

Weaknesses

Complexity: More configuration required than simpler alternatives.

Memory usage: Higher RAM requirements than Qdrant or pgvector.

Query latency: Not the fastest for pure vector search.

Learning curve: Schema design and GraphQL require upfront investment.

Performance

Solid recall, but typically slower than Pinecone and Qdrant for pure vector search, with the gap widening at larger scales. Hybrid search adds some latency depending on the complexity of the keyword component.

Pricing (Weaviate Cloud)

TierMonthly costNotes
SandboxFreeDevelopment only, time-limited
StandardFrom $25/monthProduction workloads
EnterpriseCustomSLAs, dedicated support

Self-hosting: Infrastructure costs only (typically a few hundred dollars a month for production).

Qdrant

Overview

Qdrant is a high-performance open-source vector database written in Rust. It prioritises speed and efficiency for production deployments.

Architecture

Qdrant uses a segment-based architecture optimised for fast approximate nearest neighbor search:

import { QdrantClient } from '@qdrant/js-client-rest';

const client = new QdrantClient({ url: 'http://localhost:6333' });

// Create collection
await client.createCollection('documents', {
  vectors: { size: 1536, distance: 'Cosine' },
  optimizers_config: { indexing_threshold: 10000 }
});

// Upsert
await client.upsert('documents', {
  points: [
    {
      id: 'doc-1',
      vector: embedding,
      payload: { title: 'Example', category: 'tech' }
    }
  ]
});

// Search with filtering
const results = await client.search('documents', {
  vector: queryEmbedding,
  limit: 10,
  filter: {
    must: [{ key: 'category', match: { value: 'tech' } }]
  }
});

Strengths

Performance: Among the fastest options for pure vector search. Rust implementation minimises overhead.

Memory efficiency: Quantisation and on-disk storage options reduce RAM requirements.

Filtering: Rich filtering with JSON-like payload queries.

Self-hosting friendly: Docker deployment with horizontal scaling.

Weaknesses

No hybrid search: Vector-only queries. Keyword search requires external solution.

Managed option newer: Qdrant Cloud is less mature than Pinecone's managed offering.

Smaller ecosystem: Fewer integrations and community resources than Weaviate.

Performance

Very low latency and high recall across dataset sizes, which is why it's a common pick for latency-sensitive workloads.

Pricing (Qdrant Cloud)

TierMonthly costNotes
Free$01GB storage, development
StarterFrom $25/monthProduction, auto-scaling
EnterpriseCustomDedicated clusters

Self-hosting: Infrastructure costs only (often lower than Weaviate thanks to its memory efficiency).

pgvector

Overview

pgvector is a Postgres extension adding vector similarity search. It's not a standalone database but enhances your existing Postgres deployment.

Architecture

pgvector adds vector types and indexes to standard Postgres:

-- Enable extension
CREATE EXTENSION vector;

-- Create table with vector column
CREATE TABLE documents (
  id SERIAL PRIMARY KEY,
  title TEXT,
  content TEXT,
  embedding vector(1536)
);

-- Create HNSW index for fast search
CREATE INDEX ON documents
  USING hnsw (embedding vector_cosine_ops)
  WITH (m = 16, ef_construction = 64);

-- Query
SELECT id, title, embedding <=> $1 AS distance
FROM documents
WHERE category = 'tech'
ORDER BY embedding <=> $1
LIMIT 10;

TypeScript with Supabase:

const { data } = await supabase.rpc('match_documents', {
  query_embedding: embedding,
  match_threshold: 0.8,
  match_count: 10
});

Strengths

No new infrastructure: Use your existing Postgres. One less service to manage.

Full SQL power: Join vectors with relational data, complex queries, transactions.

Ecosystem: Works with all Postgres tooling - ORMs, migrations, backups.

Cost effective: No additional database costs if you're already running Postgres.

Weaknesses

Scale limits: Performance degrades faster than purpose-built vector DBs at high scale.

Resource competition: Vector queries compete with other Postgres workloads.

Indexing time: HNSW index builds are slow for large datasets.

Memory requirements: Indexes must fit in RAM for optimal performance.

Performance

pgvector performs well at moderate scale but degrades more steeply than purpose-built vector databases as you approach hundreds of millions of vectors.

Pricing

OptionMonthly costNotes
Self-hostedInfrastructure onlyYour existing Postgres
SupabaseFrom $25/monthManaged Postgres with pgvector
NeonFrom $19/monthServerless Postgres
AWS RDSFrom $50/monthManaged Postgres

Head-to-head comparison

Performance summary

DatabaseSmall scale (~1M)Medium (~10M)Large (~100M)Recall
PineconeFastFastFastHigh
WeaviateModerateModerateSlowerHigh
QdrantFastestFastestFastestHigh
pgvectorFastModerateSlowestGood, dropping at scale

Qdrant is typically fastest. Pinecone offers the best balance of speed and managed simplicity. pgvector is competitive at moderate scale.

Feature comparison

FeaturePineconeWeaviateQdrantpgvector
Managed optionYesYesYesVia Supabase/Neon
Self-hostingNoYesYesYes
Hybrid searchNoYesNoWith pg_trgm
Metadata filteringYesYesYesSQL WHERE
ReplicationYesYesYesPostgres native
TransactionsNoNoNoYes
SQL joinsNoGraphQLNoYes
QuantisationYesYesYesLimited

Cost at scale (10M vectors, 100K queries/day)

DatabaseRelative monthly costNotes
Pinecone (serverless)HighestStorage + operations
Weaviate CloudMedium-highDepends on instance size
Qdrant CloudMediumDepends on instance size
Qdrant (self-hosted)Mediume.g. a c6a.xlarge on AWS
pgvector (Supabase)LowestPro plan with adequate compute
pgvector (self-hosted)Mediume.g. a db.r6g.large on RDS

pgvector is most cost-effective. Dedicated vector databases cost more but deliver better performance at scale.

Use case recommendations

You're already using Postgres

Winner: pgvector

Don't add complexity. pgvector handles most RAG workloads without a new service. Only move to a dedicated vector DB when you hit scale limits.

Maximum performance required

Winner: Qdrant

For latency-sensitive applications (real-time recommendations, search typeahead), Qdrant's raw speed is unmatched.

Zero ops, enterprise scale

Winner: Pinecone

When you need to scale to billions of vectors without managing infrastructure, Pinecone's managed service is the simplest path.

Hybrid search (vector + keyword)

Winner: Weaviate

Native hybrid search with configurable weighting. Essential when keyword relevance matters alongside semantic similarity.

Budget-constrained startup

Winner: pgvector on Supabase

Most affordable option with good enough performance. Scale up when you have revenue.

Multi-modal embeddings

Winner: Qdrant or Weaviate

Both handle varying vector dimensions. Pinecone and pgvector are less flexible with mixed embedding sizes.

Migration considerations

From pgvector to Qdrant

When pgvector hits scale limits:

// Export from Postgres
const vectors = await db.query(`
  SELECT id, embedding, metadata
  FROM documents
`);

// Import to Qdrant
await qdrantClient.upsert('documents', {
  points: vectors.rows.map(row => ({
    id: row.id,
    vector: row.embedding,
    payload: row.metadata
  }))
});

From Pinecone to self-hosted

For cost reduction at scale:

// Export from Pinecone
const vectors = await pineconeIndex.fetch(ids);

// Import to Qdrant
await qdrantClient.upsert('documents', {
  points: Object.entries(vectors.records).map(([id, record]) => ({
    id,
    vector: record.values,
    payload: record.metadata
  }))
});

Migration typically requires re-indexing. Plan for downtime or parallel operation during transition.

Our verdict

For most teams building their first RAG pipeline, pgvector is the right starting point. It eliminates operational complexity and performs well at typical startup scale (sub-10M vectors).

As you scale, Qdrant offers the best performance per dollar for self-hosted deployments. Pinecone is the right choice if you need enterprise scale without ops investment.

Weaviate fills a specific niche: applications requiring native hybrid search. If keyword relevance matters alongside semantic similarity, Weaviate's approach is more elegant than bolting keyword search onto a vector-only database.

The "best" vector database depends on your constraints. Start simple, measure performance, and migrate when you have data showing you need more.

---

Further reading:

---

Frequently Asked Questions

Q: When should I switch tools versus optimise current ones?

Switch when the tool fundamentally can't support your requirements, is becoming unsupported, or is significantly limiting growth. Optimise first when pain points are process-related rather than capability-related.

Q: How do I evaluate total cost of ownership?

Beyond subscription costs, factor in implementation time, training needs, integration work, ongoing maintenance, and the cost of switching if the tool doesn't work out. The cheapest option rarely has the lowest total cost.

Q: How do I choose between similar tools?

Focus on your specific use case and workflow requirements, not comprehensive feature lists. Trial multiple options with real work, involve your team in evaluation, and weight integration capabilities heavily.

More from the blog

Stop doing the work around the work

OpenHelm connects to your tools, reads the context, and does the steps, so you sign off on the result instead of producing it. See how it covers an entire role’s weekly workload, check the pricing, or run it yourself with the free local app.