4

データベースがUTCである間、レポートをCSTで表示したいと思います。これを機能させるには、時間列でグループ化し、dbにタイムゾーン変換を実行させる必要があります。

これは私の開発postgresqlボックスで機能します:

    offset = -5
    result = ActiveRecord::Base.connection.execute("select  date(srl.created_at AT TIME
    ZONE '#{offset.to_s}') AS date, count(*) from server_request_logs srl where     
    srl.created_at between '#{@from.to_s(:db)}' and '#{@to.to_s(:db)}' group by 
    date(srl.created_at AT TIME ZONE '#{offset.to_s}')")

herokuでは次のエラーが発生します:

ActiveRecord::StatementInvalid: PGError: ERROR:  time zone "-5" not recognized

また、「America / Winnipeg」のようなTZInfo名や、http: //www.postgresql.org/docs/7.2/static/timezones.htmlの「CST」のようなサポートされているタイムゾーンでは機能しません。

誰かがこれを機能させることができましたか?

4

1 に答える 1

1

TIMESTAMP WITH TIME ZONEまず、タイムスタンプ列と変数を(またはtimestamptz略して)として定義していることを確認してください。PostgreSQL では、これによって実際にタイムスタンプが保存されることはありません。ただし、UTC で保存された特定の時点にします。AT TIME ZONEクリーンなセマンティクスで選択して 表示できます。TIMESTAMP WITHOUT TIME ZONE(これは単に と言った場合に得られるものですTIMESTAMP) は、タイム ゾーンに対して解決されるまで特定の時点ではないため、作業がはるかに困難です。

タイムゾーンに関して引用したドキュメントページは、サポートが終了した非常に古いバージョンの PostgreSQL のものです。たぶん、このページはあなたにとってより役立つでしょう:

http://www.postgresql.org/docs/current/interactive/datetime-config-files.html

于 2012-04-23T03:58:18.950 に答える