为 Heroku 重写 PostgreSQL 查询
Posted
技术标签:
【中文标题】为 Heroku 重写 PostgreSQL 查询【英文标题】:Rewrite PostgreSQL query for Heroku 【发布时间】:2012-07-03 19:18:28 【问题描述】:请帮我重写它,以便它可以在 Heroku 上运行,其中 PostgreSQL (8.3.11) 不理解 over
关键字。
SELECT
user_id,
round(max(hspeed) * 2.238) as chs,
percent_rank() over (partition by con_size_id ORDER BY MAX(hspeed))
FROM
summaries ss
INNER JOIN spaths s ON ss.spath_id = s.id
INNER JOIN cons c ON c.id = s.con_id
INNER JOIN users u ON c.user_id = u.id
WHERE
con_size_id = 1
GROUP BY
user_id,
con_size_id;
“user_id”和“con_size_id”来自“cons”表,“hspeed”来自“summaries”。
【问题讨论】:
Heroku 是否支持完整的 ANSI SQL 92 语法? 我怀疑“over”是否来自 ANSI SQL 92。他们说这种语法在 PG 9.1 中可用,只能用于生产数据库。他们说:几乎完全符合 ANSI-SQL 92 和大量符合 ANSI 99 (paragoncorporation.com/ArticleDetail.aspx?ArticleID=11) PostGres 支持Percent_Rank()
。 postgresql.org/docs/8.4/static/functions-window.html
PGError: ERROR: 在“over”处或附近出现语法错误
PostgreSQL 在 8.4 中获得了窗口函数,您的 Heroku 数据库仍在使用 8.3。可以升级到专用数据库或 9.1 吗?见blog.heroku.com/archives/2012/5/1/…
【参考方案1】:
答案是升级到 8.4 或更高版本。如果没有大量复杂的用户定义函数来包装您的查询,8.3 及更低版本无法合理地支持所需的功能。
【讨论】:
以上是关于为 Heroku 重写 PostgreSQL 查询的主要内容,如果未能解决你的问题,请参考以下文章
Heroku postgresql 查询在 Heroku 上不起作用,但在本地工作
PostgreSQL——查询重写——删除重写规则以及对查询树进行重写