我有简单的ruby脚本。
@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
答案 0 :(得分: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])
的更新强> 的
P.S。在PG,你必须报出小时数。所以它将是'1'小时作为第一个参数。
我正在使用postgres 9.2.4,情况并非如此,即select '1 HOUR'::INTERVAL;
在psql中有效,请注意引号是整数值和间隔类型
问题是我是ruby(不是编程)的新手,我正在努力理解它的哲学。
我不建议从数据库交互开始学习ruby的哲学
如果你想开始使用ruby和postgres(不使用rails),我仍然建议使用ActiveRecord,但是使用原始连接对象