sql >> Databasteknik >  >> RDS >> PostgreSQL

Problem med aktiv postförfrågning och heroku.

Du bör använda en platshållare för att få rätt format och se till att det är korrekt citerat:

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

Du kan inte jämföra en timestamp kolumn med ett heltal i PostgreSQL men du kan i SQLite. Du måste jämföra din timestamp med en annan timestamp (eller date ) eller en sträng som kan tolkas som en timestamp . Denna SQL kommer inte att fungera:

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

men dessa kommer:

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

Det finns flera lektioner här:

  1. Du bör också börja utveckla ovanpå PostgreSQL om du ska distribuera till Heroku, ActiveRecord kommer inte att isolera dig från alla skillnader mellan olika databaser.
  2. Du bör låta ActiveRecord oroa sig för typkonverteringsproblemen så mycket som möjligt, om du jämför med ett datum eller en tid, använd en platshållare och ge AR ett tidsobjekt av något slag och låt AR oroa dig för det.
  3. Använd platshållare istället för stränginterpolation när det är möjligt.



  1. Bra handledning om hur du uppdaterar din Mysql-databas med ett PHP-formulär?

  2. ORA-00904 ogiltig identifierare på avkodningsalias

  3. När jag undkommer all inmatning lämnar den ibland snedstreck (\) i strängen och infogar den i databasen. Varför händer det och hur kan jag lösa detta?

  4. TSQL Pivot utan aggregatfunktion