Столбец "pg_search_***" должен появляться в предложении GROUP BY или использоваться в статистической функции

Tool.select('tools.id, tools.name').search('f')

вышеуказанный запрос работает нормально, но

Tool.select('tools.id, tools.name').group('tools.id').search('f')

выдает ошибку

ActiveRecord::StatementInvalid: PG::GroupingError: ERROR:  column
"pg_search_3aaef8932e30f4464f664f.pg_search_469c73b9b63bebacc2607f"
must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: ...xt, '')), 'D') || to_tsvector('english',
coalesce(pg_search_...

Я использую гем pg_search ( https://github.com/Casecommons/pg_search) для полнотекстового поиска. Я не могу выяснить причину, даже пытался добавить

group("tools.id, tools.*, #{PgSearch::Configuration.alias('tools')}.rank")

Как упомянуто в прочитанном мной, но все та же ошибка.
Как правильно оформить запрос?

1 ответ

PG требует, чтобы все выбранные поля присутствовали либо в предложении GROUP BY, либо в статистической функции (например, max, min) - если вы группируете по чему-либо, конечно.

Я угадываю pg_search Gem Migration создал поле с именем pg_search_469c73b9b63bebacc2607f на столе с именем pg_search_3aaef8932e30f4464f664f и это является частью вашего запроса, но не является частью предложения GROUP BY.

Я не вижу как #{PgSearch::Configuration.alias('tools')}.rank будет переводить на pg_search_3aaef8932e30f4464f664f.pg_search_469c73b9b63bebacc2607f

Попробуйте использовать group("tools.id, tools.name, pg_search_3aaef8932e30f4464f664f.pg_search_469c73b9b63bebacc2607f") и посмотрим, избавишься ли ты от этой ошибки. Если это работает, попробуйте найти программный способ получения этого pg_search_469c73b9b63bebacc2607f Имя поля

Учитывая ваш пример, я не думаю, что группировка по tools.id приносит вам пользу, если id уникален Если бы вы присоединились к чему-то другому, это могло бы иметь смысл.

Другие вопросы по тегам