PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Problème avec l'interrogation des enregistrements actifs et heroku.

Vous devez utiliser un espace réservé pour obtenir le bon format et s'assurer qu'il est correctement cité :

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

Vous ne pouvez pas comparer un timestamp colonne avec un entier dans PostgreSQL mais vous pouvez dans SQLite. Vous devez comparer votre timestamp avec un autre timestamp (ou date ) ou une chaîne qui peut être analysée comme un timestamp . Ce SQL ne fonctionnera pas :

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

mais ceux-ci :

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

Il y a plusieurs leçons ici :

  1. Vous devriez également commencer à développer sur PostgreSQL si vous allez déployer sur Heroku, ActiveRecord ne vous isolera pas de toutes les différences entre les différentes bases de données.
  2. Vous devriez laisser ActiveRecord s'occuper autant que possible des problèmes de conversion de type, si vous comparez avec une date ou une heure, utilisez un espace réservé et donnez à AR un objet temporel quelconque et laissez AR s'en occuper.
  3. Dans la mesure du possible, utilisez des espaces réservés au lieu de l'interpolation de chaîne.