PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Postgres empêche l'horodatage avec la conversion du fuseau horaire

Votre solution proposée est correcte. Ou plus précisément, c'est l'une des nombreuses implémentations correctes. N'importe lequel des éléments suivants fonctionnerait :

  • Stockez l'horodatage UTC dans un champ, stockez le décalage dans un autre.
  • Stocker l'horodatage local dans un champ, stocker le décalage dans un autre.
  • Stocker la date locale dans un champ, et stockez une time with time zone en autre. (bien que time with time zone est généralement déconseillé...)
  • Stockez les horodatages UTC dans un champ et l'horodatage local dans un autre.

Le plus simple est de loin le premier, que vous avez déjà proposé.

J'éviterais de stocker les horodatages dans text champs, car ils ont tendance à ne pas être très facilement consultables.

Notez également - si vous venez d'un arrière-plan SQL Server, vous pouvez vous rappeler son datetimeoffset type, qui stocke la date et l'heure locales et le décalage dans le champ, et utilise l'équivalent UTC lors de l'indexation. Il est courant de penser que l'timestamp with time zone de Postgres et MySQL auraient le même comportement, mais ils ne le font pas. Ils utilisent simplement la session fuseau horaire à convertir vers/depuis UTC. SQL Server n'a aucun concept de fuseau horaire de session, et donc d'écart.

Assurez-vous de lire cette partie de la documentation Postgres .