这是一个奇怪的问题。我使用PG搜索以及一些自制课程来填充我网站上的搜索结果。自制课程是用于进一步优化搜索的标签。例如,你搜索食物,你想要有机食物,所以你减少搜索结果的那些没有标签为有机食品。它运行良好很长一段时间。PostgreSQL按表只会有分组错误
这一切都是在我升级到4.2.1 rails之后开始的。
我已经能够跟踪误差特定的代码行:
joins(:tags).where(tags: {id: tag_list }).group("businesses.id").having("count(*)
= #{tag_list.size}")
这行代码是以下功能的一部分:
def self.tagged_with_all(tag_list)
unless tag_list.empty?
joins(:tags).where(tags: {id: tag_list }).group("businesses.id").having("count(*) = #{tag_list.size}")
else
all
end
end
错误看起来像这个:
PG::GroupingError: ERROR: column "pg_search_businesses.rank" must
appear in the GROUP BY clause or be used in an aggregate function
LINE 1: ...UP BY businesses.id HAVING count(*) = 1 ORDER BY pg_search_...
所以我想为什么不只是按照错误的建议,并添加pg_search_business.rank骨料所以从上面的麻烦线变为:
joins(:tags).where(tags: {id: tag_list }).group("businesses.id",
"pg_search_business.rank").having("count(*)
= #{tag_list.size}")
这个工程的一部分时间,但pg_search_business.rank并不总是出现在当这个函数被调用。而对于这些时候,如果我使用的代码直接在上面我得到以下错误:
PG::UndefinedTable: ERROR: missing FROM-clause entry for table
"pg_search_businesses"LINE 1: ...."name" = 'Kid Friendly')
GROUP BY businesses.id, pg_search_
我现在想知道如果有功能的,或者如果范围内检查pg_search_business.rank的存在的可靠方法有对于处理这个特定问题的RoR方式更好。
当方法self.tagged_with_all在pg_search的作用域之外被调用时发生该错误。
我碰到的是两个单独的分组问题,其中一个是我们必须使用pg_search_businesses.rank进行分组,另一个是我们不能使用的分组问题。我正在寻求解决此问题的最佳方法。
在此先感谢您的帮助。我是新来的编程红宝石,这是我的第一个红宝石相关的问题,所以让我知道,如果我可以为您提供更多的信息。
所以有时使用PG搜寻,有时你使用它用于其他目的,当你使用'tagged_with_all'范围是什么? –
这是正确的。让我修改我的问题。 – FujiRoyale
不是一个答案,因为我不知道pg_search的任何信息,但你可以多次调用'.group',它会做正确的事情(即'x.group(:a).group(:b)'是'GROUP BY a,b')。 –