Dit foreslåede løsning er korrekt. Eller mere præcist, det er en af flere korrekte implementeringer. Enhver af følgende ville fungere:
- Gem UTC-tidsstemplet i ét felt, gem forskydningen i et andet.
- Gem det lokale tidsstempel gem forskydningen i et felt i et andet.
- Gem den lokale
date
i ét felt, og gem entime with time zone
i en anden. (selvomtime with time zone
er generelt frarådt...) - Gem UTC-tidsstempler i ét felt og det lokale tidsstempler i et andet.
Den nemmeste er den første, som du allerede har foreslået.
Jeg ville undgå at gemme tidsstempler i text
felter, da de har tendens til ikke at være særlig effektivt søgbare.
Bemærk også - hvis du kommer fra en SQL Server-baggrund, kan du huske dens datetimeoffset
type, som gemmer den lokale dato og klokkeslæt i feltet og bruger UTC-ækvivalenten under indeksering. Det er almindeligt at tro, at Postgres og MySQL's timestamp with time zone
ville have den samme adfærd, men det har de ikke. De bruger simpelthen sessionen tidszone for at konvertere til/fra UTC. SQL Server har intet begreb om en sessionstidszone og dermed uoverensstemmelsen.
Sørg for at læse denne del af Postgres-dokumenterne .