sql >> データベース >  >> RDS >> PostgreSQL

アクティブレコードクエリとherokuの問題。

    プレースホルダー を使用する必要があります 適切な形式を取得し、適切に引用されていることを確認するには:

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

    timestampを比較することはできません PostgreSQLでは整数の列ですが、SQLiteでは可能です。 timestampを比較する必要があります 別のtimestampを使用 (またはdate )またはtimestampとして解析できる文字列 。このSQLは機能しません:

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

    しかし、これらは次のようになります:

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

    ここにはいくつかの教訓があります:

    1. Herokuにデプロイする場合は、PostgreSQL上で開発を開始する必要があります。ActiveRecordは、さまざまなデータベース間のすべての違いからあなたを隔離するわけではありません。
    2. ActiveRecordに型変換の問題をできるだけ心配させる必要があります。日付や時刻と比較する場合は、プレースホルダーを使用して、ARに何らかの時間オブジェクトを渡して、ARに心配させてください。
    3. 可能な限り、文字列補間の代わりにプレースホルダーを使用してください。



    1. Delphi XE5 FireDACエラー:ベンダーライブラリ[libmysql.dllまたはlibmysqld.dll]を読み込めません

    2. ハイブハッシュ関数の結果が0、null、1になるのはなぜですか?

    3. サブレポートフィルターを使用したEclipseでのBirtレポートの設計

    4. whileループの外部でSQLデータにアクセスできません