2013-08-25 33 views
1

我有簡單的ruby腳本。紅寶石pg無法確定參數的數據類型

@connect = PGconn.connect(@host, 5432, '', '', @db, @dbuser, @password) 
sql = "SELECT count(brand) as count FROM my_tbl WHERE time >= NOW() - 
INTERVAL '$1' HOUR GROUP BY my_tbl.brand HAVING count(brand) > $2 ORDER BY count DESC" 
res = @connect.exec_params(sql,[1,2]) 

每當我運行的代碼,我有錯誤

could not determine data type of parameter $1 

我缺少的一部分?

我試圖把字符串,而不是[1,2]它仍然沒有工作。 $ 1有撇號,但不應該是一個問題。如果是(我不能刪除撇號),那爲什麼?

P.S.該代碼是由PG docs

回答

3

基於嘗試此

@connect = PGconn.connect(@host, 5432, '', '', @db, @dbuser, @password) 
sql = " 
    SELECT count(brand) as count 
    FROM my_tbl 
    WHERE time >= NOW() - $1::INTERVAL 
    GROUP BY my_tbl.brand 
    HAVING count(brand) > $2::INTEGER 
    ORDER BY count DESC 
" 
result = @connect.exec_params(sql, ['1 HOUR', 2]) 
  • 指定與所述參數令牌
  • 經過的時間間隔的「HOUR」部分作爲參數值的數據類型(一個或多個)

更新

P.S.在PG中,你必須引用小時數。所以這將是'1'HOUR作爲第一個參數。

我使用Postgres的9.2.4,這是不是這樣的,即select '1 HOUR'::INTERVAL;是在psql裏有效,注意報價都圍繞整數值和區間型

的事情是,我是Ruby的新手(不是編程),我試圖理解它的哲學。

我不建議學習Ruby的理念與數據庫交互開始

如果你想開始使用紅寶石和Postgres(沒有使用rails)我仍然推薦使用ActiveRecord,但使用原始連接對象

+0

我也可以用'@ connect.escape_string'轉義,而不是exec_params。但問題仍然存在,我的代碼出了什麼問題? 事情是,我是新來的紅寶石(不編程),我試圖理解它的哲學。 P.S.在PG中,你必須引用小時數。因此,它將作爲第一個參數「1小時」。 – confiq

+0

添加更新部分來回答 - 希望這會有所幫助 – house9