通常はTIMESTAMPTZを使用します
Postgresの専門家であるDavidE.Wheelerからのアドバイスは、タイトルにすべてが記載されています。
常にタイムゾーン付きのタイムスタンプを使用する(TIMESTAMPTZ)
タイムライン上の特定のポイントである実際の瞬間を追跡している場合は、TIMESTAMP WITH TIME ZONE
を使用してください 。
1つの例外:パーティショニング
Wheelerの唯一の例外は、技術的な制限のため、タイムスタンプでパーティションを作成する場合です。 まれな例外 私たちのほとんどのために。
パーティショニングについては、doc を参照してください。 Wiki を参照してください。 。
ミスノマー
データ型の名前はtimestamp with time zone
およびtimestamp without time zone
誤称です。 両方 日時値がUTCで保存される場合(タイムゾーンオフセットなし)。その前の文をもう一度読んでください。 UTC、常に。 「タイムゾーンあり」という表現は、「この値と一緒にタイムゾーンを保存する」ではなく、「タイムゾーンに注意を払う」という意味です。タイプの違いは、ストレージ(INSERTまたはUPDATE)または取得(SELECTクエリ)のいずれかでタイムゾーンを適用する必要があるかどうかです。 (この動作はPostgresで説明されています-他のデータベースは大きく この点で。)
より正確には、TIMESTAMP WITHOUT TIME ZONEは、タイムゾーンのない日時値を格納すると言う必要があります。しかし、時間枠の参照がなければ、そのデータを見ている人は誰でも、値がUTCであると想定する必要があります(願っていますか?)。しかし、繰り返しになりますが、このタイプを使用することはほとんどないはずなので、議論の余地があります。
ドキュメント を読む 慎重に、少し実験して理解を明確にしてください。
ゾーン化されていない
特定の瞬間ではなく、可能な時間の一般的な考え方を保存する場合は、別のタイプのTIMESTAMP WITHOUT TIME ZONE
を使用します。 。
たとえば、クリスマスは今年、2017年12月25日の最初の瞬間に始まります。これは2017-12-25T
00:00:00
になります。 タイムゾーンのインジケーターもUTCからのオフセットもありません。この値は、考えられる瞬間についての漠然とした考えにすぎません。タイムゾーン(またはオフセット)を適用するまでは意味がありません。したがって、これはTIMESTAMP WITHOUT TIME ZONE
を使用して保存します。 。
サンタさんの特別イベントロジスティクス部門に配置されているエルフ 計画プロセスの一部としてタイムゾーンを適用します。現在、最も早いタイムゾーンは Pacific/Kiribati
、UTCの14時間前。エルフはサンタの最初の到着をスケジュールします。エルフは、Pacific/Auckland
など、真夜中がすぐに来る他のタイムゾーンにトナカイを連れて行く飛行計画をスケジュールします。 。各ゾーンの真夜中が来ると、彼らは西に向かって進み続けます。数時間後のAsia/Kolkata
、さらに後でEurope/Paris
、さらに数時間後のAmerica/Montreal
等々。
これらの特定の配達の瞬間のそれぞれは、WITH TIME ZONE
を使用してエルフによって記録されます 、クリスマスのその一般的なアイデアはWITHOUT TIME ZONE
として保存されますが 。
WITHOUT TIME ZONE
のビジネスアプリでのもう1つの使用法 数週間よりも遠くに予定をスケジュールしています。世界中の政治家は、時計をいじったり、タイムゾーンのルールを再定義したりするという不可解な傾向を持っています。彼らは夏時間(DST)に参加するか、DSTを離れるか、別の日にDSTを開始するか、別の日にDSTを終了するか、または時計を15分または30分シフトします。これらはすべて、過去数年間にトルコ、米国、ロシア、ベネズエラなどによって行われてきました。
政治家は、ほとんど事前の警告なしにこれらの変更を行うことがよくあります。したがって、歯科医の予約を13:00に6か月間スケジュールする場合は、おそらくTIMESTAMP WITHOUT TIME ZONE
として保存する必要があります。 そうでなければ、政治家はあなたの予定を正午、午後2時、または13時30分に事実上変更している可能性があります。