【问题标题】:rails SQLITE code breaks with converted to Heroku Postgresqlrails SQLITE 代码中断并转换为 Heroku Postgresql
【发布时间】:2015-09-06 10:31:34
【问题描述】:

我有一个使用标记和 sqlite 的 rails 应用程序,我正尝试将其部署为学校作业。当我部署到 Heroku(它转换为 Postgresql)时,尝试运行它时出现错误。它与 SQLITE 和 POSTGRESQL 之间的一些差异有关(从日志看来)

有两个表被连接,tags 和 tagging 存储与帖子相关的标签。

Rails 代码:

self.select("name, count(taggings.tag_id) as count")
  .joins(:taggings).group("taggings.tag_id")

这是从控制台捕获的 SQLite 生成的 sql:

Tag Load (0.2ms)  SELECT name, count(taggings.tag_id) as count
FROM "tags" INNER JOIN "taggings" ON "taggings"."tag_id" = "tags"."id"
GROUP BY taggings.tag_id

这是基于在 Postgresql 下运行的语句的 Heroku 日志错误

2015-06-20T03:25:00.360433+00:00 app[web.1]: **PG::GroupingError**: ERROR:  column "tags.name" must appear in the GROUP BY clause or be used in an aggregate function
2015-06-20T03:25:00.360435+00:00 app[web.1]: LINE 1: SELECT name, count(taggings.tag_id) as count FROM "tags" INN...
2015-06-20T03:25:00.360417+00:00 app[web.1]:   Tag Load (2.5ms)  SELECT name, count(taggings.tag_id) as count FROM "tags" INNER JOIN "taggings" ON "taggings"."tag_id" = "tags"."id" GROUP BY taggings.tag_id

我目前正在尝试寻找解决方案,但可以使用一些帮助谢谢!

我正在使用 postgres 9.3 和 rails 4.1

【问题讨论】:

    标签: ruby-on-rails postgresql heroku


    【解决方案1】:

    Postgres 要求您的SELECT 子句中的非聚合字段出现在您的GROUP 子句中,因此您选择name 但按taggings.tag_id 分组并不高兴。请尝试按name 分组。

    【讨论】:

      【解决方案2】:

      实际上,我在发布后在这里发现了完全相同的问题和解决方案。该错误准确地指出了需要做的事情。在语法中的某处包含名称...我只需要一个示例。这是最终的代码。 Tag.select("tags.id, tags.name,count(taggings.tag_id) as count")。 joins(:taggings).group("taggings.tag_id, tags.id, tags.name")

      【讨论】:

        【解决方案3】:
        self.select("name, count(taggings.tag_id) as count").joins(:taggings).group("name, taggings.tag_id")
        

        简单

        【讨论】:

        • 注意一段代码:group("name, taggings.tag_id")
        猜你喜欢
        • 2015-04-03
        • 2011-10-17
        • 1970-01-01
        • 2021-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        相关资源
        最近更新 更多