sql >> Database >  >> RDS >> PostgreSQL

Probleem met actieve recordquery's en heroku.

Je zou een placeholder moeten gebruiken om het juiste formaat te krijgen en ervoor te zorgen dat het correct wordt geciteerd:

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

Je kunt een timestamp niet vergelijken kolom met een geheel getal in PostgreSQL, maar dat kan in SQLite. Je moet je timestamp . vergelijken met een ander timestamp (of date ) of een tekenreeks die kan worden geparseerd als een timestamp . Deze SQL werkt niet:

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

maar deze zullen:

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

Er zijn hier verschillende lessen:

  1. Je moet ook beginnen met ontwikkelen bovenop PostgreSQL als je naar Heroku gaat implementeren, ActiveRecord zal je niet isoleren van alle verschillen tussen verschillende databases.
  2. Je moet ActiveRecord zich zoveel mogelijk zorgen maken over de typeconversieproblemen, als je vergelijkt met een datum of een tijd, gebruik dan een tijdelijke aanduiding en geef AR een soort tijdobject en laat AR zich er zorgen over maken.
  3. /li>
  4. Gebruik waar mogelijk tijdelijke aanduidingen in plaats van interpolatie van tekenreeksen.



  1. MySQL Groeperen op en groeperen op nulwaarden overslaan

  2. PSQLEException wordt niet gepakt

  3. Autoincrement-achtig veld voor objecten met dezelfde externe sleutel (Django 1.8, MySQL 5.5)

  4. Een derde tafel koppelen aan een overbruggingstafel in een veel-naar-veel associatie