Reviews6 Sept 202513 min read

Pinecone vs Weaviate vs Qdrant vs pgvector: Vector Database Showdown

We benchmarked four vector databases on latency, accuracy, scalability, and cost. Here's which one fits your RAG pipeline and why pgvector might surprise you.

MB
Max Beech
Head of Content

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. We benchmarked all four to help you choose.

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.

Test methodology

We benchmarked each database using:

  • Dataset: 1M, 10M, and 100M vectors (1536 dimensions, OpenAI embeddings)
  • Queries: 10,000 search queries with varying top-k values
  • Metrics: Latency (p50, p95, p99), recall@10, throughput, cost
  • Hardware: Comparable cloud instances for self-hosted options

All tests run September 2025 with latest stable versions.

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.

Benchmark results

Dataset sizeQuery latency (p50)Query latency (p99)Recall@10
1M vectors12ms45ms98.2%
10M vectors18ms72ms97.8%
100M vectors28ms110ms97.1%

Pricing

TierMonthly costNotes
StarterFree100K vectors, 5M reads
Standard (serverless)~$70/1M vectorsPay per operation
EnterpriseCustomDedicated infrastructure

Serverless pricing: $0.00002 per read unit, $2 per write unit.

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.

Benchmark results

Dataset sizeQuery latency (p50)Query latency (p99)Recall@10
1M vectors22ms85ms97.6%
10M vectors38ms145ms96.9%
100M vectors62ms220ms95.8%

Hybrid search adds 15-30ms depending on keyword component complexity.

Pricing (Weaviate Cloud)

TierMonthly costNotes
SandboxFree50K vectors, development only
StandardFrom $25/monthProduction workloads
EnterpriseCustomSLAs, dedicated support

Self-hosting: Infrastructure costs only (typically $200-500/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: Fastest pure vector search in our benchmarks. 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.

Benchmark results

Dataset sizeQuery latency (p50)Query latency (p99)Recall@10
1M vectors8ms28ms98.4%
10M vectors14ms52ms98.0%
100M vectors24ms95ms97.4%

Qdrant was consistently fastest across all dataset sizes.

Pricing (Qdrant Cloud)

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

Self-hosting: Infrastructure costs only (typically $100-300/month for production).

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.

Benchmark results

Dataset sizeQuery latency (p50)Query latency (p99)Recall@10
1M vectors15ms55ms97.8%
10M vectors35ms130ms96.5%
100M vectors85ms350ms94.2%

pgvector performed well at moderate scale but showed steeper degradation at 100M 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

Database1M p5010M p50100M p50Recall@10 (10M)
Pinecone12ms18ms28ms97.8%
Weaviate22ms38ms62ms96.9%
Qdrant8ms14ms24ms98.0%
pgvector15ms35ms85ms96.5%

Qdrant is 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)

DatabaseMonthly costNotes
Pinecone (serverless)~$260$70 storage + operations
Weaviate Cloud~$200Depends on instance size
Qdrant Cloud~$150Depends on instance size
Qdrant (self-hosted)~$200c6a.xlarge on AWS
pgvector (Supabase)~$75Pro plan with adequate compute
pgvector (self-hosted)~$150db.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: