# pgvector and Qdrant Parity Matrix

This file is generated from `docs/user_guide/parity_matrix.data`.
Run `scripts/generate-parity-matrix.sh` after changing the source data.

Status values:

- `stable`: covered by the first production SQL compatibility contract.
- `experimental`: SQL-visible or implemented, but outside the production promise.
- `planned`: explicitly not part of the first stable surface yet.
- `intentionally different`: pgContext deliberately uses PostgreSQL-native semantics.

| Capability | Reference | Status | pgContext release contract | Owning reference |
|---|---|---|---|---|
| Dense vector SQL type, casts, operators, aggregates | pgvector | `stable` | Dense `vector`, including `vector(n)` typmod metadata and assignment enforcement, is the stable first-release vector surface. | `docs/user_guide/api_reference.md` |
| Exact vector search over arrays and registered tables | pgvector,Qdrant | `stable` | Exact search is the correctness baseline for SQL search, recall checks, ANN, and hybrid retrieval. | `docs/user_guide/vector_search.md` |
| Collections over PostgreSQL source tables | Qdrant | `stable` | Collections reference authoritative PostgreSQL source tables and pgContext catalog metadata. | `docs/user_guide/collections.md` |
| Point upsert and delete mappings | Qdrant | `stable` | Point APIs map source keys to stable pgContext point IDs without owning source rows. | `docs/user_guide/collections.md` |
| Filter JSON over ordinary columns and JSONB paths | Qdrant | `stable` | Registered fields render through typed SQL predicates and SPI parameters. | `docs/user_guide/filters.md` |
| Scroll, count, and facet | Qdrant | `stable` | Stable APIs operate over active table-backed point mappings with shared filter semantics. | `docs/user_guide/api_reference.md` |
| Dense plus full-text hybrid query | Qdrant | `stable` | `pgcontext.query` supports dense vector plus PostgreSQL full-text retrieval with reciprocal rank fusion. | `docs/user_guide/hybrid_retrieval.md` |
| Telemetry and operational status functions | Qdrant | `stable` | Diagnostics expose typed statuses and local counters without vectors, payloads, filters, or literal query text. | `docs/user_guide/operations.md` |
| Model versions and embedding migrations | Qdrant | `stable` | Model-version metadata and migration progress records are stable catalog APIs. | `docs/user_guide/collections.md` |
| HNSW access method | pgvector,Qdrant | `experimental` | `pgcontext_hnsw` serves dense L2, inner-product, cosine, and L1 kNN through metric-bound persisted PostgreSQL pages, retains only published topology during concurrent inserts, exposes cancellation and `hnsw_last_scan_work` counters, has no silent exact fallback, resets on rescan, and does not support mark/restore. Table-driven mutation, VACUUM, REINDEX, exact-oracle, and crash/restart coverage runs for every dense metric; Hamming kNN remains unavailable. | `docs/user_guide/indexes.md` |
| Filtered ANN serving | Qdrant | `experimental` | Filtered table search binds a validated HNSW index and, in one statement snapshot, materializes registered column/JSONB candidates once. Selective masks cross over to exact scoring; broader masks drive one page-backed HNSW traversal using the stored metric. Masked-out nodes remain connectors and sparse masks can expand through ACORN-like second-hop neighbors. Final source joins preserve logical PointId, MVCC/deletion state, ACL/RLS, predicate, and exact-distance rechecks. Selective, broad, empty, stale-stat, deleted, typed JSONB, tenant-isolation, and cancellation cases are covered. | `docs/user_guide/vector_search.md` |
| SQL halfvec | pgvector | `experimental` | `halfvec` text I/O, dimensions, typmods, exact distance helpers, distance operators, explicit rounding numeric-array casts, aggregates, btree ordering opclass, and L2 `pgcontext_hnsw` opclass backed by dense vector storage are SQL-visible. | `docs/user_guide/pgvector_migration.md` |
| SQL sparsevec | pgvector,Qdrant | `experimental` | `sparsevec` text I/O, dimensions, typmods, structured array construction, dense `real[]`/`vector` casts, canonical accessors, exact L2, inner-product, cosine, and L1 helpers/operators, aggregates, btree ordering opclass, L2 `pgcontext_hnsw` opclass backed by dense vector storage, sparse collection metadata, exact array top-k, and named table search are SQL-visible; non-L2 sparse ANN branches remain planned. | `docs/user_guide/vector_search.md` |
| SQL bit vectors | pgvector | `experimental` | `bitvec` text I/O, dimensions, typmods, Hamming/Jaccard distance, distance operators, `boolean[]` casts, PostgreSQL `bit`/`bit varying` casts, pgvector-compatible built-in `bit` Hamming/Jaccard functions and operators, bitwise OR/AND aggregates, btree ordering opclass, and explicit Hamming `pgcontext_hnsw` indexing through `pgcontext.bitvec_hnsw_hamming_ops` are SQL-visible; Jaccard ANN indexing remains planned and default `pgcontext_hnsw` attempts fail with SQLSTATE `42704`. | `docs/user_guide/pgvector_migration.md` |
| SQL quantization APIs | pgvector,Qdrant | `experimental` | Binary, scalar/SQ8-style, product quantize/reconstruct helpers, and exact quantized-candidate rerank are SQL-visible; quantized HNSW index serving remains planned. | `docs/user_guide/indexes.md` |
| Named dense vector registration and search | Qdrant | `stable` | Named dense vector registration, dimensions, metrics, and search-by-name selection are part of the first stable table-backed search surface. | `docs/user_guide/collections.md` |
| Per-vector dense index and quantization metadata | Qdrant | `experimental` | The experimental `collection_vectors` and `configure_vector` functions expose validated metadata containers; HNSW/quantization option semantics and full planner use remain planned. | `docs/user_guide/collections.md` |
| Named sparse vectors per collection | Qdrant | `experimental` | Sparse vector registration, storage/index/status metadata, exact named sparse table search, and exact dense+sparse RRF query fusion are SQL-visible; sparse ANN/index serving remains planned. | `docs/user_guide/collections.md` |
| Multi-vector and late-interaction query | Qdrant | `experimental` | Exact late-interaction MaxSim rerank over explicit arrays, exact table-backed `vector[]` search, typed ANN-planner diagnostics, and HNSW token candidate generation with O(1) declared token-dimension validation, source-table exact MaxSim rerank, deleted-point checks, token-table prerequisite failures, planner preflight, and hydrated budget checks are SQL-visible; full memory/latency release gates remain open. | `docs/user_guide/vector_search.md` |
| Recommendation search | Qdrant | `stable` | Positive/negative point-ID and raw-vector recommendation search uses exact rerank with ACL/RLS and deleted-point checks. | `docs/user_guide/vector_search.md` |
| Discovery or explore search | Qdrant | `stable` | Exact diversity-oriented discover/explore search ranks active rows farthest from visible context examples. | `docs/user_guide/vector_search.md` |
| Query constructors | Qdrant | `stable` | Validated SQL constructors produce JSON plans for nearest, recommend, discover, lookup, prefetch, weighting, thresholds, formulas, and final rerank. | `docs/user_guide/vector_search.md` |
| Grouped search | Qdrant | `stable` | Grouped exact search caps results per registered payload field with deterministic ordering and PostgreSQL ACL/RLS checks. | `docs/user_guide/collections.md` |
| Payload mutation helpers | Qdrant | `stable` | Registered payload fields can be set, deleted, or cleared through documented source-table mutation policy. | `docs/user_guide/collections.md` |
| Bulk point backfill APIs | Qdrant | `stable` | Bulk point upsert, delete, and source-table backfill APIs report bounded per-batch progress diagnostics. | `docs/user_guide/collections.md` |
| IVFFlat | pgvector | `intentionally different` | pgContext does not support IVFFlat in the first production surface; use exact search or HNSW paths, or keep pgvector IVFFlat indexes alongside pgContext during migration. | `docs/user_guide/indexes.md` |
| PostgreSQL-native ACL, RLS, transactions, and backups | Postgres improvement | `intentionally different` | pgContext relies on PostgreSQL source tables, privileges, RLS, transactions, backup, and WAL instead of replacing them. | `docs/user_guide/security.md` |
| Rebuildable acceleration artifacts | Postgres improvement | `intentionally different` | Indexes and segment files are cache artifacts; PostgreSQL tables remain authoritative. | `docs/user_guide/storage.md` |
