PostgresのAT TIME ZONEが「UTC変換」だと思われがちな落とし穴
Postgresで日時を扱うとき、`AT TIME ZONE 'UTC'` は便利そうに見えます。ですが、実際には「UTCに直す」という単純な処理ではなく、型そのものを変えてしまうので、思い込みのまま使うと結果がずれます。元記事はこの勘違いがどこで起きるのかを丁寧に示し、さらに一度だけで済ませず、場合によっては同じ指定を二回繰り返す必要がある理由まで触れています。日時バグは後から見つけにくく、しかも小さな違いが請求、集計、検索条件にそのまま効くので、かなり実務的な話です。 元記事の出発点は、`AT TIME ZONE 'UTC'` という書き方が多くの人の想像と違う動きをする、という指摘です。Postgres では `timestamptz` と `timestamp` が別物で、前者はタイムゾーン込みの時刻、後者はタイムゾーンを持たないただの日時です。ところが `AT TIME ZONE 'UTC'` を `timestamptz` に使うと、単に「UTCにした文字列が返る」のではなく、`timestamptz` から `timestamp` に型が変わります。元記事はここを最重要ポ
papoo.work