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

Problem med aktiv postforespørgsel og heroku.

Du bør bruge en pladsholder for at få det rigtige format og sikre, at det er korrekt citeret:

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

Du kan ikke sammenligne et timestamp kolonne med et heltal i PostgreSQL, men du kan i SQLite. Du skal sammenligne dit timestamp med et andet timestamp (eller date ) eller en streng, der kan parses som et timestamp . Denne SQL vil ikke virke:

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

men disse vil:

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

Der er flere lektioner her:

  1. Du bør også begynde at udvikle oven på PostgreSQL, hvis du skal implementere til Heroku, ActiveRecord vil ikke isolere dig fra alle forskellene mellem forskellige databaser.
  2. Du bør lade ActiveRecord bekymre sig om typekonverteringsproblemerne så meget som muligt. Hvis du sammenligner med en dato eller et klokkeslæt, skal du bruge en pladsholder og give AR et tidsobjekt af en slags og lad AR bekymre sig om det.
  3. Brug pladsholdere i stedet for strenginterpolation, hvor det er muligt.



  1. Hvordan fremskyndes antallet af udvalgte(*) med gruppe efter og hvor?

  2. Garanterer UNION ALLE rækkefølgen af ​​resultatsættet

  3. Laravel 4 migreringsbasistabel blev ikke fundet

  4. 3 måder at liste alle lagrede procedurer i en PostgreSQL-database