sql >> Base de Datos >  >> RDS >> PostgreSQL

Problema con la consulta de registros activos y heroku.

Debería usar un marcador de posición para obtener el formato correcto y asegurarse de que esté correctamente citado:

t      = Time.new
events = Event.where("datetime < :t", :t => t)

No puedes comparar una timestamp columna con un número entero en PostgreSQL pero puede hacerlo en SQLite. Tienes que comparar tu timestamp con otra timestamp (o date ) o una cadena que se puede analizar como una timestamp . Este SQL no funcionará:

SELECT "events".* FROM "events" WHERE (datetime < 132462148)

pero estos:

SELECT "events".* FROM "events" WHERE (datetime < '2011-12-23 06:52:25.096869')
SELECT "events".* FROM "events" WHERE (datetime < '2011-12-23')

Hay varias lecciones aquí:

  1. También debe comenzar a desarrollar sobre PostgreSQL si va a implementar en Heroku, ActiveRecord no lo aislará de todas las diferencias entre varias bases de datos.
  2. Debe dejar que ActiveRecord se preocupe por los problemas de conversión de tipo tanto como sea posible, si está comparando con una fecha o una hora, use un marcador de posición y entregue a AR un objeto de tiempo de algún tipo y deje que AR se preocupe por eso.
  3. Use marcadores de posición en lugar de interpolación de cadenas siempre que sea posible.