PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Problem mit aktiver Datensatzabfrage und heroku.

Sie sollten einen Platzhalter verwenden um das richtige Format zu erhalten und sicherzustellen, dass es richtig zitiert wird:

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

Sie können keinen timestamp vergleichen Spalte mit einer Ganzzahl in PostgreSQL, aber Sie können in SQLite. Sie müssen Ihren timestamp vergleichen mit einem anderen timestamp (oder date ) oder eine Zeichenfolge, die als timestamp geparst werden kann . Dieses SQL funktioniert nicht:

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

aber diese werden:

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

Hier gibt es mehrere Lektionen:

  1. Sie sollten auch mit der Entwicklung auf PostgreSQL beginnen, wenn Sie Heroku bereitstellen, ActiveRecord wird Sie nicht von all den Unterschieden zwischen verschiedenen Datenbanken isolieren.
  2. Sie sollten ActiveRecord sich so weit wie möglich um die Typkonvertierungsprobleme kümmern lassen, wenn Sie mit einem Datum oder einer Uhrzeit vergleichen, verwenden Sie einen Platzhalter und geben Sie AR ein Zeitobjekt irgendeiner Art und lassen Sie AR sich darum kümmern.
  3. Verwenden Sie wo immer möglich Platzhalter anstelle von String-Interpolation.