ruby-on-rails - 列 "pg_search_***"必须出现在 GROUP BY 子句中或用于聚合函数中

标签 ruby-on-rails ruby-on-rails-3 postgresql pg pg-search

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/

相关文章:

mysql - Rails 两个键上的左连接不返回连接字段

ruby - 我应该如何测试 Mailman 应用程序

ruby-on-rails - "554 Please activate your Mailgun account. Check your inbox or log in to your control panel to resend the activation email."错误 Ruby on Rails

ruby - 如何更改表上定义的索引?

sql - 返回表的大小为 MB 而不是 KB

postgresql - 是否可以部分刷新 PostgreSQL 中的物化 View ?

ruby-on-rails - Ruby on Rails Oracle 数据库连接

ruby-on-rails - 设计记住我和 session

ruby-on-rails - 有没有办法在我的生产机器上设置 Git 存储库而不保存历史记录?

postgresql - 寻找 Postgresql 社区