gpt4 book ai didi

mysql - 将 MySQL 切换到 Postgres : "column must appear in the GROUP BY clause or be used in an aggregate function"

转载 作者:搜寻专家 更新时间:2023-10-30 20:27:41 25 4
gpt4 key购买 nike

将 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
  1. 如何解决这个问题?
  2. 难道使用 Rails 作为数据库抽象层不能确保切换数据库应该无缝工作吗?

最佳答案

问题出在 SQL 层面,这在您的 ORM 层是不可见的。问题恰恰出在 RoR ORM 上,因为它似乎生成了一个 MySQL 友好的查询,该查询使用了 MySQL 的一个非凡特性,而 postgresql 没有。

快速解决方案:将 contacts.id 也提供给您分组的列:

.group("user_id, contacts.id");

关于mysql - 将 MySQL 切换到 Postgres : "column must appear in the GROUP BY clause or be used in an aggregate function",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23475476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com