PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Problema com consulta de registro ativo e heroku.


Você deve usar um espaço reservado para obter o formato correto e garantir que ele seja citado corretamente:
t      = Time.new
events = Event.where("datetime < :t", :t => t)

Você não pode comparar um timestamp coluna com um inteiro no PostgreSQL, mas você pode no SQLite. Você precisa comparar seu timestamp com outro timestamp (ou date ) ou uma string que pode ser analisada como um timestamp . Este SQL não funcionará:
SELECT "events".* FROM "events" WHERE (datetime < 132462148)

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

Há várias lições aqui:
  1. Você também deve começar a desenvolver em cima do PostgreSQL se for implantar no Heroku, o ActiveRecord não o isolará de todas as diferenças entre vários bancos de dados.
  2. Você deve deixar o ActiveRecord se preocupar com os problemas de conversão de tipo o máximo possível, se você estiver comparando com uma data ou hora, use um espaço reservado e entregue ao AR um objeto de tempo de algum tipo e deixe o AR se preocupar com isso.
  3. Use marcadores de posição em vez de interpolação de strings sempre que possível.