Data and databases · Edition No. 2 · 27 Aug 2026

pgvector/pgvector

A Postgres extension that adds a vector column type and nearest-neighbour search.

← Data and databasesRead the whole edition →
pgvector: vector search inside Postgres. Adds a vector column type and nearest-neighbour search.

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.

Verified27 Oct 2026

Radar check

What we found when we opened it. Every bar is one fact, with its date.

Alive100

Last code pushed 26 Oct 2026, one day before this check.

Releases—

No releases published on GitHub; the code date above is the one to trust.

Maturity90

Public since April 2021, a little over 5 years.

Adoption87

23,489 stars and 1,366 forks.

Activity85

100 commits and 24 new issues in the last 90 days.

Community60

27 contributors. 2 pull requests merged in 90 days.

Security80

A security policy says how to report a problem. No published security advisories.

Licence PostgreSQL Licence: permissive: use it for anything, keep the noticeSetup effort 2 of 5Payoff 5 of 5
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.

Stars22.9k
LicencePostgreSQL License
Latestv0.8.x, actively released through 2026checked 7 Sep 2026
Written inC
NeedsDocker and PostgreSQL
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 methodWhat it needsEffort
Linux/Mac source buildC compiler, Postgres 13+, and Postgres dev files (`pg_config`)Compile and install
Windows source buildVisual Studio with C++ support, x64 Native Tools Command Prompt as administrator, `nmake`Compile and install
DockerDocker and a prebuilt image for Postgres 13 to 18Pull image
HomebrewHomebrew Postgres (`postgresql@18` or `@17`)Package install
PGXN, APT, Yum, pkg, APKMatching Postgres package repository or package managerPackage install
conda-forgeConda Postgres (community-maintained)Package install
Postgres.appPostgres 15+ releaseDownload
Hosted providersProvider that offers pgvectorEnable 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.

Setup effort
2 / 5
Payoff
5 / 5
Good
  • 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.
Watch for
  • 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.
Works well with

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.

Install
cd /tmp
git clone --branch v0.8.7 https://github.com/pgvector/pgvector.git
cd pgvector
make
make install        # may need sudo
Screenshots
pgvector/pgvector: GitHub preview card

On Stack Radar: Infrastructure & Security › Databases & Storage › Vector Databases.

Get the next edition in your inbox

A dozen repositories, opened and checked. The licence read, the last release dated, and the ones that did not make it named with the reason. It is the half most lists leave out.

No tracking pixels. One click to leave. The archive stays free either way.

We use your address to send the edition and nothing else. Confirm by email, leave in one click. How we handle it.