ruby pg无法确定参数的数据类型

时间:2013-08-25 14:33:01

标签: ruby pg

我有简单的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

1 个答案:

答案 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])
  • 使用参数标记
  • 指定数据类型
  • 将间隔的“HOUR”部分作为参数值
  • 传递

更新

  

P.S。在PG,你必须报出小时数。所以它将是'1'小时作为第一个参数。

我正在使用postgres 9.2.4,情况并非如此,即select '1 HOUR'::INTERVAL;在psql中有效,请注意引号是整数值和间隔类型

  

问题是我是ruby(不是编程)的新手,我正在努力理解它的哲学。

我不建议从数据库交互开始学习ruby的哲学

如果你想开始使用ruby和postgres(不使用rails),我仍然建议使用ActiveRecord,但是使用原始连接对象