Postgres/pgvector vs a Dedicated Vector Database

The vector-storage decision has a boringly practical answer that cuts against the hype: for most systems, the database you already run with a vector extension beats adding a new specialized system — until scale or specific features force the upgrade.

Building RAG means storing embeddings and searching them by similarity, and that raises a decision teams often over-think: use a vector extension on your existing database (like pgvector on Postgres) or adopt a dedicated vector database (Qdrant, Milvus, Weaviate, Pinecone, and others)? The marketing pushes you toward specialized systems; the engineering usually pushes back. This final post in the AI Architecture Decisions series works through it. (Retrieval is treated in depth in the Agentic RAG series; this is the storage chooser.)

The two options

The trade is the familiar one: reuse what you run vs adopt a specialized system. And the underrated cost of the specialized option is operational — a dedicated vector DB is another system to deploy, monitor, back up, secure, and keep in sync with your source of truth.

The case for “just use Postgres”

For a large fraction of systems, pgvector (or your existing DB’s vector extension) is the right call, and the reasons are practical rather than exciting:

The honest default, matching this series’ theme: start with the database you already run. Adopt a specialized system when you’ve measured a specific need it doesn’t meet, not preemptively.

When a dedicated vector database earns it

There are real reasons to reach for a specialized system, and they’re about scale and vector-specific capability:

The pattern: dedicated vector databases win at scale and on vector-specific sophistication. Below that, their advantages don’t justify the operational cost of a separate system.

The decision, and the mistake to avoid

The mistake is adopting a dedicated vector database by default because it’s the “proper” AI-native choice, before you have the scale or features that justify it — paying operational and sync costs for capability you don’t yet need. The better path: begin with your existing database’s vector extension, measure it against your real corpus size, query volume, and latency needs, and migrate to a dedicated system when (and only when) you hit a wall it solves. Because embeddings and the retrieval layer should be somewhat swappable anyway (changing the embedding model already forces re-embedding, per the data-foundations discussion), moving from pgvector to a dedicated DB later is a bounded migration, not a rewrite — which makes “start simple” low-risk.

Pick this when

Key takeaways

Further reading

Sources & References

Retrieval design