Столбец "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
уникален Если бы вы присоединились к чему-то другому, это могло бы иметь смысл.