pgvector
the correct default for most teams, and it quietly got good
verdictfree, permissive, runs on every managed postgres, and the only option here that can update an embedding and its parent row in one transaction.
- best for
- almost everyone — start here and migrate on a measured threshold, not a vendor's table
- price
- free — PostgreSQL License
- pricing note
- github reports the licence as unidentified; the file is the permissive postgresql licence, so that flag is a false alarm
- free tier
- yes
- license
- PostgreSQL License — permissive
- deployment
- extension on any postgres
- index types
- hnsw, ivfflat, binary quantization
- hybrid search
- via postgres full-text; you write the fusion
- pricing model
- free — you pay for postgres
the case for pgvector is not that it wins benchmarks. it is that it adds no new system to operate, costs nothing, and keeps your embeddings transactionally consistent with the business data they describe. no dedicated vector database can do that second thing at all.
the historical objection was filtered search. before version 0.8.0 a query with a selective WHERE clause could silently return fewer than k results — the index returned its candidates, the filter removed most of them, and you got quiet recall collapse. iterative index scans fixed exactly that in october 2024. every comparison written before then is testing a materially different product, and a lot of the folklore about pgvector dates from that era.
it supports ivfflat and hnsw, half-precision vectors and binary quantization, which matters more than it sounds: halving precision halves your footprint and binary quantization with rescoring cuts it by roughly thirty-two times. that moves your scaling wall further than switching vendors would.
the real limits are honest ones. index builds are slow and lock-heavy at scale, there is no native distributed sharding, and you own the tuning. recent releases have been correctness work — including fixes for a parallel build buffer overflow and an index-corruption risk during maintenance — which is what mature software looks like.
- +free and permissively licensed, on every managed postgres
- +transactional consistency between embeddings and business rows
- +0.8.0 iterative index scans fixed the filtered-recall flaw
- +half-precision and binary quantization cut footprint dramatically
- −index builds are slow and lock-heavy at large scale
- −no native distributed sharding
- −you own all the tuning yourself