Ruby on rails Heroku上带有无效语句的Postgresql

Ruby on rails Heroku上带有无效语句的Postgresql,ruby-on-rails,postgresql,heroku,Ruby On Rails,Postgresql,Heroku,我有一个Railsfind_by_sql方法,在控制台中本地运行良好,在Postgresql中也可以直接使用该语句,但是当我将其部署到Heroku时,该语句会导致一个ActiveRecord::StatementInvalid错误 我在本地运行Postgresql 9.0.3版,并在Cedar堆栈上使用Heroku上的共享数据库 我得到的错误是: PG::Error: ERROR: syntax error at or near "WITH normal_items" LINE 1: WITH

我有一个Rails
find_by_sql
方法,在控制台中本地运行良好,在Postgresql中也可以直接使用该语句,但是当我将其部署到Heroku时,该语句会导致一个
ActiveRecord::StatementInvalid
错误

我在本地运行Postgresql 9.0.3版,并在Cedar堆栈上使用Heroku上的共享数据库

我得到的错误是:

PG::Error: ERROR: syntax error at or near "WITH normal_items" LINE 1: WITH normal_items AS (SELECT normal_items_month, count(id)... ^ : WITH normal_items AS (SELECT normal_items_month, count(id) as normal_items_total FROM (SELECT date_trunc('month',created_at) as normal_items_month, id from items WHERE items.a_foreign_key_id IS NULL) z group by normal_items_month), special_items AS (SELECT special_items_month, count(id) as special_items_total FROM (SELECT date_trunc('month',created_at) as special_items_month, id from items WHERE items.a_foreign_key_id IS NOT NULL) x group by special_items_month ) SELECT to_char(month, 'fmMon') as month, coalesce(normal_items_total, 0) as normal_items_total, coalesce(special_items_total, 0) as special_items_total FROM (select generate_series(min(normal_items_month), max(normal_items_month), '1 month'::interval) as month FROM normal_items) m LEFT OUTER JOIN normal_items ON normal_items_month = month LEFT OUTER JOIN special_items ON special_items_month = month
为了便于阅读,该声明如下:

WITH normal_items AS (SELECT normal_items_month, count(id) as normal_items_total 
                      FROM (SELECT date_trunc('month',created_at) as normal_items_month, id from items 
                            WHERE items.a_foreign_key_id IS NULL) z 
                      group by normal_items_month), 
    special_items AS (SELECT special_items_month, count(id) as special_items_total 
                      FROM (SELECT date_trunc('month',created_at) as special_items_month, id from items 
                            WHERE items.a_foreign_key_id IS NOT NULL) x 
                      group by special_items_month ) 
SELECT 
to_char(month, 'fmMon') as month, 
coalesce(normal_items_total, 0) as normal_items_total, 
coalesce(special_items_total, 0) as special_items_total 
FROM (select generate_series(min(normal_items_month), max(normal_items_month), '1 month'::interval) as month FROM normal_items) m 
LEFT OUTER JOIN normal_items ON normal_items_month = month 
LEFT OUTER JOIN special_items ON special_items_month = month
这只是为我提供了一些用于谷歌图表的统计数据,输出为:

Jun 178 0
Jul 0   0
Aug 72  0
Sep 189 0
Oct 24  0
Nov 6   0
Dec 578 0
Jan 0   0
Feb 0   0
Mar 89  0
Apr 607 0
May 281 0
Jun 510 0
Jul 190 0
Aug 0   0
Sep 501 0
Oct 409 0
Nov 704 0

Heroku的共享计划运行的是
PostgreSQL 8.3
,它不支持带有关键字的
(它是在年引入的)


如果您升级到Heroku的软件包,您将能够使用
PostgreSQL 9.1

Heroku的共享计划运行
PostgreSQL 8.3
,该计划不支持带有
关键字的
(于年引入)


如果您升级到Heroku的软件包,您将能够使用
PostgreSQL 9.1

默认的Heroku共享数据库是Postgres 8.3-您可以在共享数据库计划的公测版中使用9.1-更多详细信息,请参阅


对于生产,您可以使用新发布的Crane计划,每月50美元

默认Heroku共享数据库为Postgres 8.3-您可以在共享数据库计划的公共测试版中使用9.1-更多详细信息,请访问


对于生产,你可以使用新公布的起重机计划,每月50美元。

约翰欢呼。我很想尝试9.1的公测版,但考虑到这一特殊声明的唯一目的是衡量标准,我想我可能暂时会推迟,直到我有足够的时间彻底测试所有内容。约翰干杯。我很想尝试9.1的公测版,但考虑到这一特殊声明的唯一目的是度量,我想我可能暂时会推迟,直到我有足够的时间彻底测试一切。