Yandex Cloud
Поиск
Связаться с экспертомПопробовать бесплатно
  • Кейсы
  • Документация
  • Блог
  • Все сервисы
    • Cloud Interconnect
    • Cloud Backup
    • Cloud Registry
    • Yandex AI Studio
    • Compute Cloud
    • Object Storage
    • Managed Service for Kubernetes®
    • Yandex BareMetal
    • Smart Web Security
    • Security Deck
    • Managed Service for PostgreSQL
    • Managed Service for ClickHouse®
    • Monium
    • Cloud CDN
    • Network Load Balancer
    • Virtual Private Cloud
    • Cloud DNS
    • Application Load Balancer
    • Yandex Cloud Video
    • Stackland
    • Yandex Cloud Router
    • Yandex Managed Service for Trino
    • Managed Service for MySQL®
    • Managed Service for Valkey™
    • Managed Service for Apache Spark™
    • Yandex StoreDoc
    • Managed Service for OpenSearch
    • Managed Service for Apache Kafka®
    • Data Transfer
    • Yandex MPP Analytics Engine for PostgreSQL
    • Yandex Managed Service for Apache Airflow®
    • Data Processing
    • Yandex MetaData Hub
    • Managed Service for YDB
    • Managed Service for Sharded PostgreSQL
    • Managed Service for YTsaurus
    • Yandex WebSQL
    • DataLens
    • Yandex Search API
    • SpeechSense
    • SpeechKit
    • DataSphere
    • Vision OCR
    • Translate
    • VibeCraft
    • Yandex Cloud Detection and Response
    • Yandex Identity Hub
    • Key Management Service
    • Certificate Manager
    • Yandex Lockbox
    • Audit Trails
    • SmartCaptcha
    • Cloud Desktop
    • GOST Gateway
    • Yandex SIEM
    • SourceCraft Code Assistant
    • Container Registry
    • Managed Service for GitLab
    • SourceCraft
    • Managed Service for Prometheus®
    • Cloud Functions
    • API Gateway
    • Yandex Cloud Postbox
    • Message Queue
    • IoT Core
    • Data Streams
    • Serverless Containers
    • Cloud Notification Service
    • Yandex Query
    • Identity and Access Management
    • Yandex Cloud Console
    • Resource Manager
    • Yandex Cloud Billing
    • Yandex Cloud Quota Manager
    • Cloud Apps
  • Статус работы сервисов
  • Marketplace
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Искусственный интеллект
    • Безопасность
    • Инструменты DevOps
    • Бессерверные вычисления
    • Управление ресурсами
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Yandex Cloud Trust
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Калькулятор цен
    • Тарифы
  • Кейсы
  • Документация
  • Блог
Создавайте контент и получайте гранты!Готовы написать своё руководство? Участвуйте в контент-программе и получайте гранты на работу с облачными сервисами!
Подробнее о программе
Сделано на Gravity UI
Проект Яндекса
© 2026 ООО «Яндекс.Облако»
Yandex Managed Service for PostgreSQL
  • Начало работы
    • Все руководства
    • Создание кластера PostgreSQL для 1С
    • Создание кластера Linux-серверов «1С:Предприятия» с кластером Managed Service for PostgreSQL
    • Выгрузка базы данных в Yandex Data Processing
    • Поиск проблем с производительностью кластера
    • Анализ производительности и оптимизация
    • Настройка подключения из контейнера Serverless Containers
    • Поставка данных в Yandex Managed Service for Apache Kafka® с помощью Yandex Data Transfer
    • Поставка данных в Yandex Managed Service for YDB с помощью Yandex Data Transfer
    • Загрузка данных из Yandex Managed Service for YDB с помощью Yandex Data Transfer
    • Поставка данных в Yandex Managed Service for Apache Kafka® с помощью Debezium
    • Захват изменений PostgreSQL и поставка в YDS
    • Поставка данных из Yandex Managed Service for Apache Kafka® с помощью Yandex Data Transfer
    • Перенос данных из Yandex Object Storage с использованием Yandex Data Transfer
    • Настройка отказоустойчивой архитектуры в Yandex Cloud
    • Мониторинг состояния географически распределенных устройств
    • Запись логов балансировщика в PostgreSQL
    • Создание сервера MLFlow для логирования экспериментов и артефактов
    • Работа с данными с помощью Query
    • Федеративные запросы к данным с помощью Query
    • Решение проблем с сортировкой строк после обновления glibc
    • Запись данных с устройства в базу данных
    • Подключение к Managed Service for PostgreSQL из PySpark-задания в Yandex Managed Service for Apache Spark™ с использованием секрета Yandex Lockbox
    • Настройка прав доступа к секрету, созданному Connection Manager, для пользователя Managed Service for PostgreSQL
    • Выполнение аналитических запросов в Managed Service for PostgreSQL с обработкой в Managed Service for ClickHouse®
    • Выполнение векторного поиска в Yandex Managed Service for PostgreSQL с помощью pgvector
  • Управление доступом
  • Инспекции и рекомендации
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Публичные материалы
  • История изменений
  • Обучающие курсы

В этой статье:

  • Перед началом работы
  • Необходимые платные ресурсы
  • Подготовьте инфраструктуру
  • Подготовьте тестовые данные
  • Выполните поисковые запросы
  • Создайте индекс для ускорения поиска
  • HNSW
  • IVFFlat
  • Удалите созданные ресурсы
  1. Практические руководства
  2. Выполнение векторного поиска в Yandex Managed Service for PostgreSQL с помощью pgvector

Выполнение векторного поиска в Yandex Managed Service for PostgreSQL с помощью vector

Статья создана
Yandex Cloud
Обновлена 15 октября 2026 г.
Открыть в Markdown
  • Перед началом работы
    • Необходимые платные ресурсы
  • Подготовьте инфраструктуру
  • Подготовьте тестовые данные
  • Выполните поисковые запросы
  • Создайте индекс для ускорения поиска
    • HNSW
    • IVFFlat
  • Удалите созданные ресурсы

Вы можете хранить векторные данные и выполнять векторный поиск в Yandex Managed Service for PostgreSQL с помощью расширения vector.

Расширение поддерживает:

  • Точный и приблизительный поиск ближайших соседей.
  • Различные типы векторов: одинарной точности, половинной точности, бинарные и разреженные векторы.
  • Несколько метрик сравнения векторов: L2 (евклидово расстояние), косинусное расстояние, скалярное произведение, L1 (манхэттенское расстояние), расстояние Хэмминга и Жаккара.
  • Работу с любым языком программирования, который поддерживает подключение к PostgreSQL.

Векторный поиск можно комбинировать с привычными возможностями PostgreSQL и SQL.

По умолчанию в vector выполняется точный поиск, при котором сравниваются все векторы. Для больших объемов данных можно создавать векторные индексы и использовать приблизительный поиск. В этом случае поиск выполняется быстрее, но результаты могут быть менее точными.

В vector поддерживается два типа индексов:

  • HNSW — организует векторы в структуру данных, которая позволяет быстро переходить от одного похожего вектора к другому и находить ближайших соседей без проверки всей таблицы. В основе этой структуры лежит многослойный граф.
  • IVFFlat — разбивает все векторы на несколько групп (списков). Во время поиска проверяются не все группы, а только те, которые наиболее близки к искомому вектору. По сравнению с HNSW этот индекс строится быстрее и использует меньше памяти, но уступает по качеству и скорости поиска.

Расширение vector доступно в кластерах Managed Service for PostgreSQL версии 13 и выше. Подробнее о расширении vector читайте в его документации.

Чтобы выполнить векторный поиск в Managed Service for PostgreSQL:

  1. Подготовьте инфраструктуру.
  2. Подготовьте тестовые данные.
  3. Выполните поисковые запросы.
  4. Создайте индекс для ускорения поиска.

Если созданные ресурсы вам больше не нужны, удалите их.

Перед началом работыПеред началом работы

Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь.
  2. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.

Подробнее об облаках и каталогах.

Необходимые платные ресурсыНеобходимые платные ресурсы

  • Кластер Managed Service for PostgreSQL: использование выделенных хостам вычислительных ресурсов, объем хранилища и резервных копий (тарифы Managed Service for PostgreSQL).
  • Публичные IP-адреса, если для хостов кластера включен публичный доступ (тарифы Yandex Virtual Private Cloud).

Подготовьте инфраструктуруПодготовьте инфраструктуру

  1. Создайте облачную сеть с именем demo-network.

    При создании сети автоматически создаются три подсети в разных зонах доступности.

  2. В сети demo-network создайте группу безопасности mpg-sg для кластера Managed Service for PostgreSQL и добавьте в группу правило для входящего трафика, которое разрешает подключение к кластеру через интернет:

    • Диапазон портов — 6432.
    • Протокол — TCP.
    • Назначение — Диапазон адресов.
    • IPv4 CIDR — 0.0.0.0/0.
  3. Создайте кластер Managed Service for PostgreSQL любой подходящей конфигурации со следующими настройками:

    • Версия — 13 или выше.

    • Сеть — demo-network.

    • Группа безопасности — mpg-sg.

    • База данных — pgdb.

    При создании кластера включите публичный доступ к хостам.

    Примечание

    Публичный доступ к хостам кластера нужен, если вы планируете подключаться к кластеру через интернет. Этот вариант подключения более простой, и его рекомендуется использовать для прохождения руководства. К хостам без публичного доступа тоже можно подключиться, но только с виртуальных машин Yandex Cloud, расположенных в той же облачной сети, что и кластер.

  4. В кластере Managed Service for PostgreSQL добавьте расширение vector в базу данных pgdb.

Подготовьте тестовые данныеПодготовьте тестовые данные

  1. Подключитесь к кластеру Managed Service for PostgreSQL.

  2. Создайте столбец-вектор размером 3:

    CREATE TABLE items (
      id bigserial PRIMARY KEY, 
      embedding vector(3)
    );
    
  3. Добавьте векторы:

    INSERT INTO items (embedding) 
    VALUES
    ('[1,2,3]'),
    ('[4,5,6]'),
    ('[7,8,9]'),
    ('[10,11,12]'),
    ('[13,14,15]'),
    ('[16,17,18]');
    

Выполните поисковые запросыВыполните поисковые запросы

  1. Найдите трех ближайших соседей на расстоянии L2:

    SELECT *
    FROM items
    ORDER BY embedding <-> '[3,1,2]'
    LIMIT 3;
    

    Для получения расстояния в расширении vector используются следующие функции:

    • <-> — расстояние L2 (евклидово расстояние);
    • <#> — отрицательное скалярное произведение;
    • <=> — косинусное расстояние;
    • <+> — расстояние L1 (манхэттенское расстояние);
    • <~> — расстояние Хэмминга (для бинарных векторов);
    • <%> — расстояние Жаккара (для бинарных векторов).
  2. Найдите три строки, наиболее похожие на первую:

    SELECT *
    FROM items
    WHERE id != 1
    ORDER BY embedding <->
    (
    SELECT embedding
    FROM items
    WHERE id = 1
    )
    LIMIT 3;
    
  3. Найдите строки, находящиеся в пределах заданного расстояния:

    SELECT *
    FROM items
    WHERE embedding <-> '[3,1,2]' < 15;
    
  4. Получите расстояние, на котором находится каждый вектор от вектора [3,1,2]:

    SELECT embedding <-> '[3,1,2]'
    AS distance
    FROM items;
    
  5. Чтобы рассчитать скалярное произведение, умножьте результат на -1, т. к. оператор <#> возвращает отрицательное скалярное произведение:

    SELECT (embedding <#> '[3,1,2]') * -1 AS inner_product
    FROM items;
    
  6. Чтобы узнать, насколько каждый вектор похож на вектор [3,1,2] по косинусному сходству, используйте 1 - cosine distance:

    SELECT 1 - (embedding <=> '[3,1,2]') AS cosine_similarity
    FROM items;
    
  7. Найдите средний вектор:

    SELECT AVG(embedding)
    FROM items;
    

Создайте индекс для ускорения поискаСоздайте индекс для ускорения поиска

Создайте индекс каждого типа: HNSW и IVFFlat.

HNSWHNSW

  1. Создайте индекс HNSW для поиска по расстоянию L2:

    CREATE INDEX ON items
    USING hnsw (embedding vector_l2_ops)
    WITH (
    m = 16,
    ef_construction = 64
    );
    

    Где:

    • m — максимальное количество связей, которое может иметь вершина графа на каждом уровне. По умолчанию — 16.
    • ef_construction — количество кандидатов, рассматриваемых при построении графа. По умолчанию — 64. Чем выше значение, тем выше вероятность найти наиболее подходящие записи, но индекс строится дольше и операции вставки выполняются медленнее.

    Эти параметры задаются один раз при создании индекса. Чтобы изменить их значения, пересоздайте индекс.

    Для каждой функции расчета расстояния нужно создавать свой индекс HNSW. Подробнее в документации расширения vector.

  2. Настройте параметры поиска:

    SET hnsw.ef_search = 3;
    

    Где ef_search — количество векторов, которые алгоритм рассматривает во время поиска. По умолчанию — 40. Чем выше значение, тем выше вероятность найти наиболее похожие записи, но запрос будет выполняться медленнее.

    В отличие от параметров индекса m и ef_construction, параметр поиска ef_search можно изменять перед выполнением запросов.

  3. Выполните поиск ближайших соседей:

    SELECT *
    FROM items
    ORDER BY embedding <-> '[3,1,2]'
    LIMIT 3;
    

    Если результаты поиска оказались недостаточно точными, увеличьте значение ef_search и повторите запрос.

IVFFlatIVFFlat

  1. Создайте индекс IVFFlat для поиска по расстоянию L2:

    CREATE INDEX ON items
    USING ivfflat (embedding vector_l2_ops)
    WITH (
    lists = 3
    );
    

    Где lists — количество групп (списков), на которые будут разделены векторы. Рекомендуемое значение зависит от объема данных. Чем больше групп, тем быстрее поиск, но качество поиска может снизиться.

    Этот параметр задается один раз при создании индекса. Чтобы изменить его значение, пересоздайте индекс.

    Для каждой функции расчета расстояния нужно создавать свой индекс IVFFlat. Подробнее в документации расширения vector.

  2. Настройте параметры поиска:

    SET ivfflat.probes = 1;
    

    Где probes — количество групп (списков), просматриваемых при выполнении поиска. По умолчанию используется 1. Чем больше значение, тем выше вероятность найти наиболее похожие записи, но ниже скорость выполнения запроса.

    В отличие от параметра индекса lists, параметр поиска probes можно изменять перед выполнением запросов.

  3. Выполните поиск ближайших соседей:

    SELECT *
    FROM items
    ORDER BY embedding <-> '[3,1,2]'
    LIMIT 3;
    

    Если результаты поиска оказались недостаточно точными, увеличьте значение probes и повторите запрос.

Удалите созданные ресурсыУдалите созданные ресурсы

Если не планируете больше использовать кластер Managed Service for PostgreSQL, удалите его, чтобы за него не списывалась плата.

Была ли статья полезна?

Предыдущая
Выполнение аналитических запросов в Managed Service for PostgreSQL с обработкой в Managed Service for ClickHouse®
Следующая
Логическая репликация PostgreSQL
Создавайте контент и получайте гранты!Готовы написать своё руководство? Участвуйте в контент-программе и получайте гранты на работу с облачными сервисами!
Подробнее о программе
Сделано на Gravity UI
Проект Яндекса
© 2026 ООО «Яндекс.Облако»