# pgvector и векторные БД

> pgvector — расширение PostgreSQL для хранения векторов-эмбеддингов и поиска ближайших соседей; векторные БД — специализированные системы для той же задачи.

Источник: https://llmdocs.ru/wiki/pgvector/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Тип**: расширение PostgreSQL
- **Автор**: Эндрю Кейн
- **Первый выпуск**: 2021
- **Лицензия**: PostgreSQL License
- **Типы данных**: vector, halfvec, bit, sparsevec
- **Индексы**: HNSW, IVFFlat
- **Метрики**: L2, скалярное произведение, косинусное расстояние, L1, Хэмминг, Жаккар
- **Альтернативы**: Qdrant, Milvus, Weaviate, Chroma, Pinecone, FAISS
**pgvector** — расширение для [PostgreSQL](https://llmdocs.ru/wiki/postgresql.md), добавляющее тип данных для векторов и операторы поиска ближайших соседей. С его помощью в обычной таблице можно хранить [эмбеддинги](https://llmdocs.ru/wiki/embedding.md) — числовые представления текстов, изображений или товаров — и находить записи, наиболее похожие на запрос. **Векторными базами данных** называют системы, специально созданные для хранения векторов и быстрого [векторного поиска](https://llmdocs.ru/wiki/vector-search.md): Qdrant, Milvus, Weaviate, Chroma, Pinecone и другие.

Интерес к обоим подходам резко вырос с распространением больших языковых моделей: векторный поиск — основа [RAG](https://llmdocs.ru/wiki/rag.md), семантического поиска, рекомендаций и поиска дубликатов.

## Зачем нужен векторный поиск

Модель-кодировщик превращает фрагмент текста в вектор из сотен или тысяч чисел так, что близкие по смыслу тексты дают близкие векторы. Поиск «похожих документов» сводится к поиску векторов, ближайших к вектору запроса. Точный перебор всех векторов надёжен, но на миллионах записей медленный, поэтому применяют **приближённый поиск ближайших соседей** (ANN, *approximate nearest neighbor*): он жертвует небольшой долей точности (*recall*) ради ускорения на порядки.

## pgvector

Расширение создал Эндрю Кейн в 2021 году; распространяется под той же лицензией, что и PostgreSQL, и доступно у большинства облачных провайдеров.[1]

### Типы и операторы

| Тип | Описание |
|---|---|
| `vector(n)` | вектор из `n` чисел одинарной точности |
| `halfvec(n)` | половинная точность — вдвое меньше места |
| `bit(n)` | двоичный вектор (для бинарной квантизации) |
| `sparsevec(n)` | разреженный вектор, хранит только ненулевые элементы |

| Оператор | Расстояние |
|---|---|
| `<->` | евклидово (L2) |
| `<#>` | отрицательное скалярное произведение |
| `<=>` | косинусное расстояние |
| `<+>` | манхэттенское (L1) |

Типы `halfvec`, `sparsevec` и оператор L1 появились в версии 0.7.0 (2024).[2]

### Индексы

Без индекса pgvector выполняет точный поиск полным перебором. Для приближённого поиска есть два вида [индексов](https://llmdocs.ru/wiki/database-index.md):

- **HNSW** (*Hierarchical Navigable Small World*) — многоуровневый граф близости, в котором поиск спускается от редких «дальних» связей к плотным локальным.[3] Даёт лучшее соотношение скорости и точности, но строится дольше и занимает больше памяти. Добавлен в версии 0.5.0 (2023).
- **IVFFlat** — векторы разбиваются на кластеры (списки), и поиск просматривает только несколько ближайших кластеров. Строится быстрее, но индекс нужно создавать после загрузки данных, а точность сильнее зависит от параметров.

### Пример

```sql
CREATE EXTENSION IF NOT EXISTS vector;

CREATE TABLE chunks (
    id        bigserial PRIMARY KEY,
    doc_id    bigint NOT NULL,
    content   text   NOT NULL,
    embedding vector(1024)
);

CREATE INDEX ON chunks USING hnsw (embedding vector_cosine_ops);

-- 5 фрагментов, ближайших к вектору запроса, только из нужного документа
SELECT id, content, embedding <=> $1 AS distance
FROM chunks
WHERE doc_id = 42
ORDER BY embedding <=> $1
LIMIT 5;

-- точность/скорость HNSW во время запроса
SET hnsw.ef_search = 100;
```

Главное преимущество pgvector — векторы живут рядом с остальными данными: в одном запросе можно сочетать векторную близость с фильтрами по обычным столбцам, соединениями и полнотекстовым поиском, а изменения подчиняются [транзакциям](https://llmdocs.ru/wiki/transaction-acid.md), резервному копированию и [репликации](https://llmdocs.ru/wiki/replication.md) PostgreSQL. Ограничение — индексы поддерживают векторы до 2000 измерений для `vector` и до 4000 для `halfvec`.[1]

## Специализированные векторные БД

| Система | Особенности |
|---|---|
| Qdrant | на Rust, фильтрация по полезной нагрузке, квантизация[5] |
| Milvus | распределённая, рассчитана на миллиарды векторов |
| Weaviate | встроенные модули векторизации, гибридный поиск |
| Chroma | лёгкая встраиваемая база для прототипов |
| Pinecone | управляемый облачный сервис |
| FAISS | не база, а библиотека ANN-поиска от Meta[4] |

Векторные функции добавили и универсальные системы: Elasticsearch и OpenSearch, [Redis](https://llmdocs.ru/wiki/redis.md), [MongoDB](https://llmdocs.ru/wiki/mongodb.md) (Atlas Vector Search), [ClickHouse](https://llmdocs.ru/wiki/clickhouse.md), [SQLite](https://llmdocs.ru/wiki/sqlite.md) (расширение sqlite-vec).

## Как выбирать

- **До нескольких миллионов векторов, данные уже в PostgreSQL** — pgvector обычно достаточно и избавляет от второй системы, синхронизации и отдельного бэкапа.
- **Сотни миллионов и миллиарды векторов, высокая нагрузка, сложная квантизация** — специализированная векторная БД.
- **Прототип или локальный эксперимент** — Chroma, sqlite-vec или FAISS в памяти.

Сравнивать производительность алгоритмов помогает открытый набор тестов ANN-Benchmarks.[6] На практике качество RAG чаще определяется нарезкой текста, выбором модели эмбеддингов и переранжированием, чем выбором хранилища.

## См. также

- [Векторный поиск](https://llmdocs.ru/wiki/vector-search.md)
- [Эмбеддинг](https://llmdocs.ru/wiki/embedding.md)
- [RAG (генерация с дополнением поиском)](https://llmdocs.ru/wiki/rag.md)
- [PostgreSQL](https://llmdocs.ru/wiki/postgresql.md)
- [Индекс (базы данных)](https://llmdocs.ru/wiki/database-index.md)

## Источники

1. [pgvector — README (GitHub)](https://github.com/pgvector/pgvector)
2. [pgvector — CHANGELOG](https://github.com/pgvector/pgvector/blob/master/CHANGELOG.md)
3. [Yu. Malkov, D. Yashunin — Efficient and robust approximate nearest neighbor search using HNSW graphs (2016)](https://arxiv.org/abs/1603.09320)
4. [FAISS — Facebook AI Similarity Search](https://github.com/facebookresearch/faiss)
5. [Qdrant Documentation — Concepts](https://qdrant.tech/documentation/concepts/)
6. [ANN-Benchmarks](https://ann-benchmarks.com/)
