1

我有简单的红宝石脚本。

@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 有撇号,但这不应该是一个问题。如果是(我无法删除撇号)那为什么?

PS 代码基于PG 文档

4

1 回答 1

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

更新

PS 在 PG 中,您必须引用小时数。所以它将是 '1' HOUR 作为第一个参数。

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

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

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

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

于 2013-08-25T15:30:42.337 回答