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

Railsはタイムゾーンを変換しません(PostgreSQL)

    データベースはタイムスタンプをUTCで保存しています(必要に応じて)。 ActiveRecordは、タイムスタンプがあることがわかっているときにタイムゾーンを調整しています。だから、あなたがこれを言うとき:

    puts Activity.first.starting_at
    

    ARはstarting_atを知っています はタイムスタンプであるため、タイムスタンプを ActiveSupport::TimeWithZoneとしてインスタンス化します。 インスタンスとそのクラスはタイムゾーン調整を適用します。しかし、あなたがこれを言うとき:

    select("date_trunc('day', activities.starting_at) as date ...
    

    ARは、SQLを解析してdate_truncを把握することはありません。 タイムスタンプを返します。ARはdate_truncが何であるかさえ知りません。 意味。 ARはデータベースから文字列が出てくるのを見るだけで、解釈せずにそれをあなたに渡します。その文字列をActiveSupport::TimeWithZoneに自由にフィードできます (またはあなたの好きな時間処理クラス)あなた自身:ARに、それ自体ではわからないことやわからないことを伝えることに何の問題もありません。

    Railsは賢いですが、魔法ではありません。




    1. 既存のテーブルに列を追加し、MSSQLServerで一意の番号を付けます

    2. 連想配列のインデックスとしてデータの主キー値をフェッチします

    3. PostgreSQLにトリガーが存在するかどうかを確認するにはどうすればよいですか?

    4. MySQL 5.1でintをビットにキャストするにはどうすればよいですか?