タイプ_added_at
_の列_timestamp without time zone
_があります。デフォルト値を現在の日時にしたいのですが、タイムゾーンはありません。関数now()
もタイムゾーンを返します。
どうすればその問題を解決できますか?
SELECT now()::timestamp
それで全部です。キャストはタイムスタンプをタイムゾーンの現在のタイムスタンプに変換します。 標準SQL関数LOCALTIMESTAMP
がPostgresで実装される方法でもあります。
複数のタイムゾーンで操作しない場合は、正常に機能します。それ以外の場合は、added_at
をtimestamptz
に切り替えます。違い?
次のようなことができます:
_SELECT now() AT TIME ZONE current_setting('TimeZone');
SELECT now() AT TIME ZONE 'Europe/Paris';
SELECT now() AT TIME ZONE 'UTC';
_
列 "added_at"にどのように意味があるかわかりません。ほとんどの場合、浮動タイムスタンプではなく絶対タイムスタンプ(タイムゾーン付きタイムスタンプ)が必要です。
以下のポイントへの応答を編集します。
はい。理由がない限り、タイムゾーン(絶対時間)のタイムスタンプを使用する必要があります。
クライアントのタイムゾーンは、上記のように_SHOW TimeZone
_またはcurrent_setting(...)
で指定されます。
マニュアルをざっと読むのに少し時間をかけてください-それらはすべてこれを非常にうまくカバーしています。
CURRENT_TIMEおよびCURRENT_TIMESTAMPは、タイムゾーン付きの値を提供します。 LOCALTIMEおよびLOCALTIMESTAMPは、タイムゾーンなしで値を配信します。