sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cuál es un tipo de datos apropiado para almacenar una zona horaria?

Desafortunadamente, PostgreSQL no ofrece un tipo de datos de zona horaria, por lo que probablemente debería usar text .

interval parece una opción lógica a primera vista, y lo es apropiado para algunos usos. Sin embargo, no tiene en cuenta el horario de verano ni el hecho de que diferentes regiones en el mismo desplazamiento UTC tienen diferentes reglas de horario de verano.

No hay un mapeo 1:1 desde el desplazamiento UTC hasta la zona horaria.

Por ejemplo, la zona horaria de Australia/Sydney (Nueva Gales del Sur) es UTC+10 (EST ), o UTC+11 (EDT ) durante el horario de verano. Sí, ese es el mismo acrónimo EST que usa EE.UU.; los acrónimos de zona horaria no son únicos en la base de datos tzdata, razón por la cual Pg tiene las timezone_abbreviations ajuste. Peor aún, Brisbane (Queensland) tiene casi la misma longitud y está en UTC+10 EST ... pero no tiene horario de verano, por lo que en algún momento está en un -1 desplazamiento a Nueva Gales del Sur durante el horario de verano de NSW.

(Actualizar :Más recientemente, Australia adoptó una A prefijo, por lo que usa AEST como su acrónimo TZ de los estados del este, pero EST y WST permanecer en uso común).

¿Te confunde mucho?

Si todo lo que necesita almacenar es una compensación UTC luego un interval es apropiado. Si desea almacenar una zona horaria , guárdelo como text . Es un fastidio validar y convertir a una compensación de zona horaria en este momento, pero al menos hace frente al horario de verano.