提案された解決策は正しいです。より正確には、これはいくつかの正しい実装の1つです。次のいずれかが機能します:
- UTCタイムスタンプを1つのフィールドに保存し、オフセットを別のフィールドに保存します。
- ローカルタイムスタンプを保存する あるフィールドにオフセットを別のフィールドに保存します。
- ローカルの
date
を保存します 1つのフィールドに、time with time zone
を保存します 別の。 (ただし、time with time zone
一般的にはお勧めしません...) - UTCタイムスタンプを1つのフィールドに保存し、ローカルタイムスタンプを別のフィールドに保存します。
はるかに簡単なのは、すでに提案した最初のものです。
text
にタイムスタンプを保存しないようにします フィールドは、あまり効率的に検索できない傾向があるためです。
また、SQL Serverのバックグラウンドを使用している場合は、そのdatetimeoffset
を思い出すかもしれません。 タイプ。ローカルの日時とオフセットをフィールドに格納し、インデックス作成時に同等のUTCを使用します。 PostgresとMySQLのtimestamp with time zone
と考えるのが一般的です 同じ動作をしますが、そうではありません。彼らは単にセッションを使用します UTCとの間で変換するタイムゾーン。 SQL Serverには、セッションタイムゾーンの概念がないため、不一致があります。
Postgresドキュメントのこの部分 を必ずお読みください。 。