When your existing Postgres is enough, when to graduate to a dedicated vector DB, and how the major options compare for Django apps.
For 90% of Django apps building RAG or semantic search: use pgvector. Your existing Postgres is fine, you avoid extra infrastructure, your data stays in one place, and the performance is more than enough up to millions of vectors.
The other vector databases exist for the 10% of cases where pgvector hits a real wall. This tutorial helps you tell which case you're in.
It stores high-dimensional vectors (typically 256–3072 floats per item) and answers queries like "give me the K vectors most similar to this query vector." The non-trivial part is doing this fast on millions of items — naive scan is too slow, so they use approximate nearest neighbour algorithms (HNSW, IVF, etc.).
Beyond raw search, modern vector DBs offer:
WHERE clauses, matureReal signals you've outgrown it:
If none of these apply, stay on pgvector. Migrating later is a real but bounded project (a few weeks).
For 1M vectors of dimension 1536, queried at 10 QPS:
| Option | Monthly cost | Operational overhead |
|---|---|---|
| pgvector on existing Postgres | $0 (incremental) | Low |
| pgvector on dedicated Postgres (4 vCPU / 16GB) | ~$70 (Hetzner CPX41) | Low |
| Pinecone Standard | ~$140+ | Zero |
| Weaviate Cloud | ~$100+ | Low |
| Qdrant Cloud | ~$50+ | Low |
| Self-hosted Qdrant on Hetzner | ~$30 (CPX31) | Medium |
For a Django app early in its life, the gap between "free pgvector" and "$70+ managed service" is meaningful. For a mature product with millions of users, $140 a month is a rounding error and the operational savings of a managed service usually win.
Are you building a vector search feature?
├── No → don't pick anything yet
└── Yes
├── Already running Postgres? (almost always yes for Django)
│ └── Yes → start with pgvector
└── Vector count > 10M and growing fast?
└── Yes → evaluate Pinecone or Qdrant
That's it. Don't pick a vector database before you have a problem; pgvector is good enough for the first chapter of almost every product.
If you start with pgvector and outgrow it, your DocumentChunk model abstracts the storage. You can swap the retrieval implementation:
# myapp/rag/retrieve.py
from django.conf import settings
if settings.VECTOR_BACKEND == "pgvector":
from .backends.pgvector_backend import retrieve
elif settings.VECTOR_BACKEND == "qdrant":
from .backends.qdrant_backend import retrieve
The work to migrate is mostly bulk-export-and-import of vectors plus rewriting the retrieve function. Plan for a weekend, not a quarter.
Vector database FOMO is real. The honest answer is that pgvector handles most Django workloads, costs nothing additional, and keeps your stack simple. Reach for the bigger systems when you have measurable problems pgvector can't solve — not before.