advanced

pgvector

Храните и индексируйте vectors в PostgreSQL, когда relational metadata и vector search belong together.

pgvector расширяет PostgreSQL типом `vector` и ANN-индексами (IVFFlat, HNSW), чтобы реляционные строки и эмбеддинги жили вместе. Уместен, когда важнее join по метаданным, транзакции, row-level security и умеренный масштаб векторов (до низких десятков миллионов в зависимости от железа), чем латентность отдельного vector SaaS.

					CREATE TABLE docs (
  id bigserial PRIMARY KEY,
  tenant_id uuid NOT NULL,
  body text,
  embedding vector(1536)
);
CREATE INDEX ON docs USING hnsw (embedding vector_cosine_ops);
				

Паттерн запроса: сначала SQL-фильтры, затем сортировка по оператору расстояния (`<->`, `<#>`, `<=>`) с LIMIT.

На интервью: когда pgvector лучше отдельного store (единая эксплуатация, ACID, join) и когда пора вырастать (миллиарды векторов, экстремальный QPS, спецфильтрация).

Типовые ошибки: индекс только когда таблица огромна; IVFFlat без достаточного lists или ANALYZE; эмбеддинги без колонки версии модели; sequential scan на каждом запросе; bloat и vacuum на таблицах с частыми обновлениями.

Компромисс — простота эксплуатации и единая модель данных против потолка производительности ANN и конкуренции с OLTP за ресурсы Postgres.

Чеклист:

  • Покажите колонку vector + индекс HNSW/IVFFlat.
  • Совместите SQL-фильтры с ORDER BY по расстоянию.
  • Спланируйте версию модели и миграции re-embed.
  • Оцените pool соединений и память под ANN.
  • Задайте порог перехода на dedicated vector DB.