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 ) gem 进行全文搜索。 我无法弄清楚甚至尝试添加的原因
group("tools.id, tools.*, #{PgSearch::Configuration.alias('tools')}.rank")
正如阅读我所提到的,但仍然是同样的错误。
构建查询的正确方法是什么?
最佳答案
PG 要求所有选定的字段要么出现在 GROUP BY 子句中,要么出现在聚合函数中(例如:最大值、最小值)- 当然,如果您按任何内容进行分组。
我猜 pg_search
gem 迁移在名为 pg_search_3aaef8932e30f4464f664f
的表上创建了一个名为 pg_search_469c73b9b63bebacc2607f
的字段,这是您查询的一部分,但不是 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
是唯一的。不过,如果您加入其他事件,这可能是有意义的。
关于ruby-on-rails - 列 "pg_search_***"必须出现在 GROUP BY 子句中或用于聚合函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34484898/