300+ Tools CoveredSource Data Updated Weeklydates

Decision comparison

pgvector vs Turbopuffer

pgvector and turbopuffer answer opposite ends of the same question. pgvector keeps embeddings in PostgreSQL beside the rows they describe, so updates are transactional, filtering is full SQL, and no new system exists. turbopuffer is a dedicated serverless service on object storage, priced so that large or mostly-idle corpora cost very little to hold.

vector databases
Last Updated:

Direct comparison. These are reviewed substitutes bought for the same job, so the differences below are the ones that decide between them.

All 2 are vector databases.

Quick Comparison

pgvector

What it is:
An extension that adds vector types and indexes to PostgreSQL, so embeddings live beside the application's existing tables
Where vectors live:
In PostgreSQL, beside the application's existing tables
Synchronisation:
A row update and its embedding update are one transaction
Cost shape:
Part of the database you already pay for
Filtering:
Full SQL: joins, subqueries and any predicate Postgres supports
Scale ceiling:
Comfortable into the low millions of vectors, competing with application queries
Best fit:
Applications on PostgreSQL with a modest corpus
Integration path:
Python and JavaScript clients over a REST API, with LangChain and LlamaIndex support

Turbopuffer

What it is:
A serverless vector and full-text search engine built on object storage, priced so that large, rarely queried collections stay inexpensive
Where vectors live:
In a dedicated serverless search service on object storage
Synchronisation:
A pipeline keeps the index in step with the source of truth
Cost shape:
Storage is cheap; you pay mainly when queries run
Filtering:
Filtering built into the search service, designed for selective predicates
Scale ceiling:
Designed for large corpora and many collections, most of them idle
Best fit:
Large or long-tail corpora, especially per-customer indexes
Integration path:
Python and JavaScript clients over a REST API, with LangChain and LlamaIndex support

Public signals

Verified factual signals only. Bars appear only for like-for-like metrics with five weekly assessments for every tool; missing evidence stays explicit. These signals do not establish enterprise adoption, product quality, or total cost.

MetricpgvectorTurbopuffer
Docker Hub pulls(Product adoption)194.8MNot available
GitHub commits, 90d(Product adoption)153Not available
GitHub stars(Product adoption)23,000+Not available
Search interest(Market interest)
3
0
Hacker News mentions, 90d(Community interest)
10
11
npm weekly downloads(Developer adoption)
369.9k
672.4k
PyPI weekly downloads(Developer adoption)
6.7M
1.1M
Stack Overflow questions(Community interest)90Not available
GitHub commits, 90d(Developer adoption)Not available30
GitHub stars(Developer adoption)Not available169

As of September 21, 2026 — updated weekly.

Health & risk evidence

Observed public-source checks for mapped package versions and repositories.

pgvector

September 21, 2026

Package vulnerabilities

npm · pgvector@0.3.0 · PyPI · pgvector@0.5.0

0 vulnerabilities

across 2 packages

Repository security score

Not available

Turbopuffer

September 21, 2026

Package vulnerabilities

npm · @turbopuffer/turbopuffer@2.9.0 · PyPI · turbopuffer@2.10.1

0 vulnerabilities

across 2 packages

Repository security score

Not available

Interface Preview

Turbopuffer

Turbopuffer product interface

Feature Comparison

Architecture

Vectors beside operational data

pgvectorFull support
TurbopufferNot verified

Transactional updates with the source rows

pgvectorFull support
TurbopufferNot verified

Object storage backed

pgvectorNot verified
TurbopufferFull support

Cost independent of corpus size

pgvectorPartial support
TurbopufferFull support

Query

Full SQL joins and predicates

pgvectorFull support
TurbopufferNot verified

Filtering with selective predicates

pgvectorFull support
TurbopufferFull support

Hybrid keyword and vector search

pgvectorFull support
TurbopufferFull support

Many isolated collections

pgvectorPartial support
TurbopufferFull support

Operations

No extra system to run

pgvectorFull support
TurbopufferNot verified

Serverless, nothing to size

pgvectorNot verified
TurbopufferFull support

Independent scaling of the search workload

pgvectorNot verified
TurbopufferFull support

Open source

pgvectorFull support
TurbopufferNot verified

Integration

Python and JavaScript clients

pgvectorFull support
TurbopufferFull support

REST API

pgvectorFull support
TurbopufferFull support

Metadata stored with vectors

pgvectorFull support
TurbopufferFull support

Works with LangChain and LlamaIndex

pgvectorFull support
TurbopufferFull support
Full supportPartial supportNot supportedNot verifiedNot applicable

Which to choose

pgvector and turbopuffer answer opposite ends of the same question. pgvector keeps embeddings in PostgreSQL beside the rows they describe, so updates are transactional, filtering is full SQL, and no new system exists. turbopuffer is a dedicated serverless service on object storage, priced so that large or mostly-idle corpora cost very little to hold.

Best-fit scenarios

Choose pgvector if:

Choose pgvector when the application already runs on PostgreSQL and the corpus is within its comfortable range. Embeddings and rows update together, filtering is the SQL you already write including joins, and there is nothing new to deploy, secure, monitor or back up.

Choose Turbopuffer if:

Choose turbopuffer when the corpus is large or mostly idle, or when search load would compete with the application's own queries. An object-storage index makes tens of millions of vectors — or an index per customer — inexpensive to keep, and the bill follows queries rather than data volume.

These scenarios reflect the available product evidence. Your requirements, existing stack, and team expertise should guide the final decision.

Frequently Asked Questions

When does Postgres stop being enough?

Usually at one of two points: the corpus grows past the low millions and index build or query times become uncomfortable, or search traffic starts competing with the application's own queries on the same instance. Both are measurable rather than theoretical, so instrument before migrating — the answer is often further away than architecture discussions assume.

What fraction of our vectors are searched in a normal day?

It decides how much an object-storage service is worth. If nearly all of the corpus is queried daily, keeping it where the application already is costs little extra. If a small fraction is — per-customer indexes, archived documents, a long tail — the economics shift sharply, because you stop paying to keep cold data in a hot system.

How does filtering work on each?

This is where the two differ most in practice, because almost every real query is "similar to this, and belonging to this customer, and not archived". pgvector filters with Postgres: the predicate is ordinary SQL over ordinary columns with ordinary indexes, and the planner decides whether to filter first or search first — which is powerful and occasionally chooses badly, returning too few neighbours when the predicate is selective. turbopuffer organises data into namespaces, so the common tenant filter becomes a choice of namespace rather than a predicate at all. Test with your most selective filter, not an unfiltered benchmark.

What keeps embeddings in step with the rows they describe?

This is the strongest argument for pgvector and the thing to plan for with turbopuffer. In Postgres the embedding is a column on the row, so updating a document and its vector is one transaction and cannot half-succeed. With a separate store it is a pipeline: a document changes, something must notice, re-embed it and update the index, in order, with retries when the embedding service is slow. That pipeline is ordinary work and it is also the part of a vector deployment that quietly breaks. If your corpus changes constantly, weigh that heavily; if it is rebuilt in batches, it barely matters.

What do these need to run?

An embedding model and a client. Applications in Python or JavaScript call a REST API, embeddings come from an OpenAI, Cohere or open-source model, and the retrieval framework is usually LangChain or LlamaIndex. Self-hosted options run as containers on Docker or Kubernetes with S3 or compatible object storage behind them; managed options need only an API key. The infrastructure is unremarkable — the work is in chunking, embedding choice and keeping the index current.

How should we evaluate them?

With your own corpus and your own queries, measuring recall rather than latency alone. Approximate nearest neighbour search trades accuracy for speed, and the tuning knobs differ between engines, so a fast engine returning worse neighbours looks good on a benchmark and bad to a user. Build a small set of queries with known correct answers, then compare recall at the latency you actually need.