Skip to main content

Qdrant vs pgvector

A dedicated vector engine, or vectors next to the rest of your data.

Choose pgvector when you already run Postgres and want vectors beside your records, joined and filtered with SQL in one database. Choose Qdrant when vector search is a core workload, with large collections, heavy filtering, hybrid search, or memory pressure that a dedicated engine handles better. We use Qdrant in NoteTube and pgvector in Acasa Sentinel.

Updated · Acasa Labs

At a glance

Qdrant and pgvector, side by side.

What it isQdrantA dedicated vector database, written in RustpgvectorAn extension that adds vector types and indexes to Postgres
Where it runsQdrantSelf-hosted, or Qdrant CloudpgvectorAny Postgres that allows it: Supabase, Cloud SQL, RDS, or your own
IndexesQdrantHNSW, with payload indexes for filteringpgvectorHNSW and IVFFlat
FilteringQdrantFilters on payload fields, applied during the searchpgvectorSQL WHERE clauses; filtered queries need index and query care
Hybrid searchQdrantDense and sparse vectors in one collectionpgvectorCombine with Postgres full-text search in SQL
Memory and scaleQdrantQuantization and on-disk storage options built inpgvectorhalfvec and bit types; scale follows your Postgres server
Joins with your dataQdrantNo; keep IDs and join in the applicationpgvectorYes: vectors, records, and PostGIS in one query
OperationsQdrantOne more service to run, back up, and monitorpgvectorNothing new; it is your existing database
LicenceQdrantApache 2.0pgvectorPostgreSQL licence

01

The decision is mostly about your database

Both store embeddings and find the nearest ones to a query, and both use HNSW indexes to do it fast. For a few hundred thousand vectors with simple filters, either will answer in milliseconds, and users will not tell them apart.

The real choice is architectural. pgvector keeps vectors inside Postgres, so they live next to your users, documents, and permissions, and one transaction can update all of them. Qdrant is a separate service built only for vector search, so you get more search features and tuning, and one more system to run and keep in sync.

02

When pgvector is the better choice

Pick pgvector when you already run Postgres. There is no new service, no second backup plan, and no sync job between your records and your vectors. If a document is deleted, its embeddings can be deleted in the same transaction.

Pick it when the search needs your relational data. Filtering by tenant, date, or status, or joining to other tables and extensions such as PostGIS, is plain SQL.

And pick it when the collection is moderate and the team is small. Managed Postgres providers such as Supabase and Cloud SQL offer pgvector, so the vector store comes with the database you already pay for.

03

When Qdrant is the better choice

Pick Qdrant when vector search is the product's core workload. Large collections, many queries per second, and frequent re-indexing are what a dedicated engine is built for, and keeping that load off your main database protects everything else.

Pick it when filtering is heavy. Qdrant applies payload filters during the search rather than before or after it, which keeps results accurate when a filter, such as one user's documents, matches only a small slice of the collection.

And pick it when you need search features beyond nearest neighbours: sparse and dense vectors together for hybrid search, quantization to cut memory, and multitenancy patterns built into the engine.

04

Filtering, the part that bites

Most RAG systems never search everything. They search one user's notes, one customer's documents, or one project's files. How the store combines the filter with the vector index decides whether results are both fast and complete.

In Qdrant, you index the payload fields you filter on and the engine plans around them. In pgvector, an approximate index can return fewer rows than you asked for when a selective WHERE clause discards most of the candidates, so you test filtered queries on realistic data and tune the index and query settings, or use partitions or partial indexes per tenant.

05

Changing your mind later

Embeddings are portable. If you keep the source text and the embedding model's name with each chunk, you can move from pgvector to Qdrant, or back, with a re-index job rather than a rewrite. Hide the vector store behind one module in your code and the switch touches one file.

That is why we rarely agonise over this choice on a first version. Start where your data already lives, measure retrieval quality and latency with real queries, and move when the numbers say so.

From production

One of each, in real systems.

  • Qdrant for per-user retrieval

    NoteTube

    NoteTube stores chunks from every source a student uploads in Qdrant, with per-user, per-session scoping, and streams grounded answers from a FastAPI service. Relational data sits separately in Supabase Postgres.

  • pgvector beside location and time

    Acasa Sentinel

    Acasa Sentinel stores a 768-dimension DINOv2 embedding for every vehicle sighting in Postgres with pgvector, alongside PostGIS, so appearance search can work with where and when a vehicle was seen even when its plate is unreadable.

  • Retrieval that is not only vectors

    SigmaCPM

    SigmaCPM retrieves candidate pages from a tender package before extraction, so the model reads the right pages instead of the whole package. Good retrieval is about the right pages, whatever the store.

How we choose

The five questions we ask before choosing

An existing Postgres, moderate scale, and joins point to pgvector. Vector search as the core workload, heavy filtering, or hybrid search at scale point to Qdrant.

  1. 01Do you already run Postgres, and is it managed for you?
  2. 02How many vectors, and how many queries a second, in a year?
  3. 03How selective are the filters, such as per-user or per-tenant?
  4. 04Does search need to join with records or locations?
  5. 05Who will run and monitor one more service?

Questions

Qdrant vs pgvector, asked often.

Is pgvector good enough for production RAG?

For many products, yes. Acasa Sentinel runs appearance search on pgvector. Test filtered queries on realistic data before you rely on it.

Is Qdrant faster than pgvector?

It depends on the collection, filters, and hardware. Benchmarks vary widely. Measure with your own data and queries before deciding on speed.

Can we start on pgvector and move to Qdrant later?

Yes. Keep the source text and model name with each chunk, wrap the store in one module, and the move is a re-index job.

Do we need a vector database at all?

Not always. For small collections or exact-match needs, Postgres full-text search or a well-designed filter may be enough. We test that first.

Should we self-host Qdrant or use Qdrant Cloud?

Self-host if you already run containers and want data in your account. Use the cloud service if nobody on your team wants to operate it.

Qdrant vs pgvector

Picking a vector store? Bring your queries.

Tell us what you search, how much, and who can see what. We will tell you where the vectors should live, and how we would test it.

Ask which one fits

No pitch deck. You own the code from day one.

contact@acasalabs.com