Ditt föreslagna lösning är korrekt. Eller mer exakt, det är en av flera korrekta implementeringar. Något av följande skulle fungera:
- Lagra UTC-tidsstämpeln i ett fält, lagra offseten i ett annat.
- Lagra den lokala tidsstämpeln i ett fält, lagra offset i ett annat.
- Lagra det lokala
date
i ett fält och lagra entime with time zone
i en annan. (även omtime with time zone
är allmänt avskräckt...) - Lagra UTC-tidsstämplarna i ett fält och den lokala tidsstämpeln i ett annat.
Den överlägset enklaste är den första, som du redan föreslagit.
Jag skulle undvika att lagra tidsstämplar i text
fält, eftersom de tenderar att inte vara särskilt effektivt sökbara.
Observera också - om du kommer från en SQL Server-bakgrund kan du komma ihåg dess datetimeoffset
typ, som lagrar lokal datumtid och offset i fältet, och använder UTC-motsvarigheten under indexering. Det är vanligt att tro att Postgres och MySQL:s timestamp with time zone
skulle ha samma beteende, men det gör de inte. De använder helt enkelt sessionen tidszon för att konvertera till/från UTC. SQL Server har inget begrepp om en sessionstidszon, och därmed avvikelsen.
Var noga med att läsa den här delen av Postgres-dokumenten .