Данные / Интеграция

Фильтровать строки PostgreSQL обычной фразой

Расширение добавляет функции jev(), jev_prob(), jev_choice() и другие к PostgreSQL. Строки отправляются группами, а результаты кешируются в сессии.

По делу

Что это решает

pg-jev добавляет к PostgreSQL функции, которые проверяют смысловое условие для строки: например, «клиент угрожает уйти». Вероятностный ответ Jev возвращается в SQL и сочетается с обычным WHERE, сортировкой и группировкой.

Результат для пользователя

Писать смысловые WHERE-условия и ранжировать записи

Какие запросы становятся возможны

jev(row, condition) возвращает булево значение по порогу, jev_prob — вероятность. Есть также функции выбора категории, оценки по шкале и просмотра полного ответа. Это позволяет, например, отсортировать тикеты по вероятности раздражения клиента и затем отдать верхние строки специалисту.

Для точного сравнения дат и чисел сам автор рекомендует оставлять обычный SQL. Модель нужна для смыслового условия, которое трудно выразить регулярным правилом.

Как обрабатываются строки

Расширение собирает строки в небольшие пакеты и задаёт по вопросу на строку в одном состоянии запроса. Результат кешируется в рамках сессии, поэтому повторная сортировка по той же оценке может не потребовать нового вызова. LIMIT может остановить чтение раньше, а дешёвые SQL-условия лучше применить до jev().

Это не индекс и не бесплатная локальная функция: содержимое проверяемых строк уходит во внешний API. В настройках есть ограничения числа строк и символов на SQL-операцию, чтобы случайно не отправить слишком много данных.

Кому доступна установка

Требуются PostgreSQL 14–17, plpython3u, права суперпользователя и ключ TypeSafe. Некоторые управляемые PostgreSQL-сервисы не дают установить такое расширение. Для них подход нужно реализовывать вне базы, а не обещать установку через один SQL-запрос.

Как попробовать самому

  1. 01Проверить права на сервере и наличие plpython3u; README предлагает PGXN, сборку из исходников или Docker.
  2. 02Создать расширение и начать с короткой таблицы и одного jev_prob().
  3. 03Проверить jev_stats(), установить лимит строк и оценить расходы до запуска по большой таблице.
Инструкция и код автора

Ограничение этого проекта

Содержимое строк передаётся внешнему провайдеру. Это полный проход по проверяемым строкам, поэтому стоимость и права доступа нужно оценить заранее.