PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Problema con le query di record attive e heroku.

Dovresti utilizzare un segnaposto per ottenere il formato corretto e assicurarsi che sia quotato correttamente:

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

Non puoi confrontare un timestamp colonna con un numero intero in PostgreSQL ma puoi farlo in SQLite. Devi confrontare il tuo timestamp con un altro timestamp (o date ) o una stringa che può essere analizzata come timestamp . Questo SQL non funzionerà:

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

ma questi:

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

Ci sono diverse lezioni qui:

  1. Dovresti anche iniziare a sviluppare su PostgreSQL se intendi eseguire il deployment su Heroku, ActiveRecord non ti isolerà da tutte le differenze tra i vari database.
  2. Dovresti lasciare che ActiveRecord si preoccupi il più possibile dei problemi di conversione del tipo, se stai confrontando una data o un'ora, usa un segnaposto e consegna ad AR un oggetto tempo di qualche tipo e lascia che AR se ne occupi.
  3. Utilizza i segnaposto invece dell'interpolazione di stringhe ove possibile.