HN 日本語サマリー

← 一覧へ戻る
プログラミング

Postgresの「at time zone 'UTC'」におけるフットガン

Footguns with Postgres “at time zone 'UTC'” (bookofrevenue.com)

168 pointsby birdculture114 コメント

要約

PostgreSQLのタイムゾーン機能、「at time zone 'UTC'」は、直感に反する動作をすることがあります。この機能は、指定されたタイムゾーン(この場合はUTC)に変換するのではなく、指定されたタイムゾーンを「解釈」して、そのタイムゾーンのローカル時刻として扱おうとします。これにより、意図しない結果やデータ破損につながる可能性があるため、注意が必要です。

全文翻訳

PostgreSQLのタイムゾーン機能、「at time zone 'UTC'」は、直感に反する動作をすることがあります。 この機能は、指定されたタイムゾーン(この場合はUTC)に変換するのではなく、指定されたタイムゾーンを「解釈」して、そのタイムゾーンのローカル時刻として扱おうとします。 たとえば、PostgreSQLのサーバーがUTCで実行されているとします。 SELECT NOW() AT TIME ZONE 'UTC'; これは、現在のUTC時刻を返します。 しかし、サーバーがUTC以外のタイムゾーンで実行されている場合、たとえば「America/Los_Angeles」で実行されている場合、次のようになります。 SELECT NOW() AT TIME ZONE 'UTC'; これは、現在の「America/Los_Angeles」のローカル時刻を返します。 これは、PostgreSQLが「at time zone」句を、指定されたタイムゾーンに変換するのではなく、指定されたタイムゾーンを「解釈」して、そのタイムゾーンのローカル時刻として扱おうとするためです。 これは、意図しない結果やデータ破損につながる可能性があるため、注意が必要です。 PostgreSQLのタイムゾーン機能の正しい動作を理解するには、公式ドキュメントを参照することをお勧めします。