Heroku Postgres错误 - 运算符不存在 timestamp without timezone = integer。

7

我在我的控制器中使用以下代码:

  @monday = (Time.now).at_beginning_of_week

  @friday = 5.days.since(@monday)-1.second

  @sent_emails = ContactEmail.all(:conditions => ['date_sent >= ? and date_sent <= ?', @monday, @friday])

尽管在我的本地sqlite上能够正常工作,但我遇到了“operator does not exist timestamp without timezone = integer”错误。
我不太清楚该怎么修改。
有什么建议吗?
谢谢。
1个回答

9
您的参数@monday和@friday是错误的,必须为“没有时区的时间戳”类型,但是创建为整数,请参见错误消息。SQLite没有任何日期时间数据类型,因此日期存储为文本或整数(Unix时间戳)。这就是为什么在SQLite中您不会收到错误消息的原因。
请确保像“2004-10-19 10:23:54”这样创建时间戳,那么您将不会遇到问题。另一个选择是使用PostgreSQL函数to_timestamp()将您的Unix时间戳转换为时间戳:
@sent_emails = ContactEmail.all(:conditions => ['date_sent >= to_timestamp(?) and date_sent <= to_timestamp(?)', @monday, @friday])

你会推荐哪种方式?在Postgres中转换还是创建适当的格式来处理@monday和@friday?如果选择后者,如何操作呢?我查看了Ruby对时间的定义...不清楚该怎么做...谢谢! - Satchel
使用正确的格式,现在你还可以在该列上使用简单索引来提高速度。 - Frank Heikens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接