
22.9k stars · PostgreSQL License · v0.8.x, actively released through 2026 · Track this in Rising ↗
Vector search as an ordinary SQL query inside the Postgres he already runs. No new server, no new backup story.
Radar check
What we found when we opened it. Every bar is one fact, with its date.
Last code pushed 26 Oct 2026, one day before this check.
No releases published on GitHub; the code date above is the one to trust.
Public since April 2021, a little over 5 years.
23,489 stars and 1,366 forks.
100 commits and 24 new issues in the last 90 days.
27 contributors. 2 pull requests merged in 90 days.
A security policy says how to report a problem. No published security advisories.
How the bars are scored
- Alive. Days since the last code push: a week or less 100, a month 90, three months 70, six months 50, a year 30, eighteen months 15, older 0.
- Releases. Age of the latest GitHub release, on a similar scale; no bar when the project publishes no releases.
- Maturity. Age of the project: eight years 100, five 90, three 70, two 55, one 40, six months 25, younger 10.
- Adoption. Stars on a log scale: 100,000 stars is 100, 10,000 is 80, 1,000 is 60, 100 is 40.
- Activity. Commits in the last 90 days: 300 or more 100, 100 85, 30 65, 10 45, any 25.
- Community. People who have contributed: 100 or more 100, 30 80, 10 60, 5 40, 2 25, one 10.
- Security. A published security policy 80, none 40; published advisories are listed, not scored.
Checked by Repo Radar on 27 Oct 2026 from the repository on GitHub. Covered in Edition 2.
▶Repo detailsthe review · specs · pros & cons · install
What it does
It adds column types for vectors in full precision, half precision, binary and sparse form, and operators for six ways of measuring distance between them, including the three in common use. With no index it searches exactly, which means perfect results and a slow query on a large table. Two index types are offered: HNSW, with better query speed but slower builds and more memory, and IVFFlat, with faster builds and less memory but weaker results at the same speed. Because the vectors are ordinary Postgres columns, the database's own behaviour applies to them, including transactions, point-in-time recovery and joins to other tables. The limits are published exactly: 2,000 dimensions for an indexed standard vector, 4,000 for a half-precision one, and 16,000 stored. What it does not do is scale sideways by itself: the README says to use replicas or a separate sharding project for that, mentions no graphics-card support, and warns that filtering happens after the index is read, so a filtered query can return fewer rows than asked for.
Why it matters
Who it suits. Any project that already runs Postgres and wants search by meaning without a second database to run, secure, back up and pay for. The decisive feature is that one query can filter by user, document and date and rank by similarity at the same time, which most dedicated engines make awkward. Skip it if there is no Postgres in the picture already, and skip it at a scale where a dedicated engine's last few per cent of speed is worth a whole extra service.
Verdict. The safest choice in this part, and the licence is part of why: the PostgreSQL Licence, read from the file, which is permissive and carries the database project's own copyright line. It is also the de-facto standard, which has a practical benefit — the examples a coding assistant produces for it tend to be right the first time. Two cautions and one oddity. Building an HNSW index is memory-hungry, and the README warns that setting the working-memory setting too high can exhaust the server, which on a small machine means the build fails rather than runs slowly. The index settings and the embedding model have to stay in step, because changing the model quietly degrades the results with no error to show. The oddity is bookkeeping: the release page answered "there aren't any releases here" today, while the changelog in the repository records 0.8.6 on 29 July 2026 as the newest released version and marks 0.8.7 as unreleased, even though the README's own install commands already name a v0.8.7 tag. Code landed on 8 October 2026.
Summary (Key Points)from the README
Key features
- Distance operators: Supports L2 (`<->`), inner product (`<#>`), cosine (`<=>`), L1 (`<+>`), Hamming (`<~>`), and Jaccard (`<%>`) distance.
- Vector types: Single-precision `vector`, half-precision `halfvec`, binary `bit`, and `sparsevec`, each with its own storage formula.
- Exact and approximate search: Exact search is the default with perfect recall. HNSW and IVFFlat indexes trade some recall for speed.
- HNSW defaults: `m` is 16 and `ef_construction` is 64. Query-time `hnsw.ef_search` defaults to 40.
- Iterative index scans: Added in 0.8.0, these scan more of the index when filtered queries return too few rows. `hnsw.max_scan_tuples` defaults to 20,000.
- Quantization: Binary quantization with re-ranking keeps indexes smaller and speeds up builds at scale. Half-precision indexing is another option.
- Hybrid search: Can be combined with Postgres full-text search, using Reciprocal Rank Fusion or a cross-encoder.
- Postgres foundations: Uses the WAL, so replication and point-in-time recovery work, and it supports JOINs and ACID.
Ways to install
| Platform or method | What it needs | Effort |
|---|---|---|
| Linux/Mac source build | C compiler, Postgres 13+, and Postgres dev files (`pg_config`) | Compile and install |
| Windows source build | Visual Studio with C++ support, x64 Native Tools Command Prompt as administrator, `nmake` | Compile and install |
| Docker | Docker and a prebuilt image for Postgres 13 to 18 | Pull image |
| Homebrew | Homebrew Postgres (`postgresql@18` or `@17`) | Package install |
| PGXN, APT, Yum, pkg, APK | Matching Postgres package repository or package manager | Package install |
| conda-forge | Conda Postgres (community-maintained) | Package install |
| Postgres.app | Postgres 15+ release | Download |
| Hosted providers | Provider that offers pgvector | Enable in provider |
Important
- Index dimension limits: `vector` indexes cover up to 2,000 dimensions, `halfvec` up to 4,000, `bit` up to 64,000, and `sparsevec` up to 1,000 non-zero elements.
- Results change with approximate indexes: Unlike typical indexes, results can differ after adding an approximate index.
- Filtered queries return fewer rows: With HNSW, filtering happens after the index scan, so a 10% filter with `ef_search` of 40 averages only 4 matching rows.
- Unindexed vectors: NULL vectors are not indexed, and neither are zero vectors for cosine distance.
- HNSW costs: Builds are slower and use more memory than IVFFlat. Vacuuming can also be slow, and reindexing first can speed it up.
- IVFFlat needs data first: Create it after the table has data, or recall will suffer.
- Memory settings: Do not set `maintenance_work_mem` high enough to exhaust server memory. In Docker, `--shm-size` must be at least that size to avoid errors in parallel HNSW builds.
- Portability: `-march=native` can cause Illegal instruction errors on other machines, so use the portable build option when moving binaries.
- Windows bug: Linking fails on Postgres 17.0 to 17.2, so upgrade to 17.3 or later.
- Multitenancy: A shared approximate index lets one tenant's vectors affect recall for others. Use list partitioning or separate tables for isolation.
Written by an AI model from the project’s README; not part of the review, and it can be wrong.
- No new service. One
CREATE EXTENSION, and the existing Postgres backups already cover the vectors. - Similarity ranking and ordinary filters in the same query, which is the thing dedicated engines handle least well.
- The PostgreSQL Licence, read from the file, and limits published as exact numbers rather than described.
- Building an HNSW index is memory-hungry, and the README warns that the working-memory setting can exhaust a small server.
- No horizontal scaling of its own, no graphics-card support, and filtering after the index read can return fewer rows than requested.
- The release page showed no releases at all today, and the repository disagrees with itself about whether 0.8.7 is out.
pgvector keeps the vectors beside the rows they belong to, so one pg_dump still captures everything and a single query can filter by user, document and date and rank by similarity.
cd /tmp git clone --branch v0.8.7 https://github.com/pgvector/pgvector.git cd pgvector make make install # may need sudo
