Фильтровать строки 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-запрос.
Как попробовать самому
- 01Проверить права на сервере и наличие
plpython3u; README предлагает PGXN, сборку из исходников или Docker. - 02Создать расширение и начать с короткой таблицы и одного
jev_prob(). - 03Проверить
jev_stats(), установить лимит строк и оценить расходы до запуска по большой таблице.
Ограничение этого проекта
Содержимое строк передаётся внешнему провайдеру. Это полный проход по проверяемым строкам, поэтому стоимость и права доступа нужно оценить заранее.