sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres förhindrar tidsstämpel med tidszonkonvertering

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 en time with time zone i en annan. (även om time 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 .




  1. Kan MySQL konvertera en lagrad UTC-tid till lokal tidszon?

  2. vad är det för fel på denna Magento-fråga?

  3. Fel:mysqladmin:uppdatering misslyckades; fel:'Okänt fel'

  4. Hur säkerställer man inga luckor i auto_increment-tal?