将rails应用程序从MySQL切换到Postgres会出现以下错误:
ERROR: column "contacts.id" must appear in the GROUP BY clause or be used in an aggregate function
以下是相关范围:
class User < MyModel
def self.top_contacts(timeframe = 1.week.ago, limit = 5)
Contact.unscoped
.where('created_at between ? and ?', timeframe, Time.now)
.group(:user_id)
.order('sum(score) DESC')
.limit(limit)
.includes(:user)
.collect{|x| x.user}
end
end
答案 0 :(得分:2)
问题出在SQL的级别上,这在您的ORM层中是不可见的。问题恰恰在于RoR ORM,因为它似乎生成了一个MySQL友好的查询,它使用了MySQL的一个非凡功能,postgresql没有。
快速解决方案:将contacts.id
提供给您正在进行分组的列:
.group("user_id, contacts.id");