sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgres forhindrer tidsstempling med tidszonekonvertering

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 en time with time zone i en anden. (selvom time 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 .




  1. Kommandolinje MySQL-forespørgseleksportoutput til fil fungerer ikke i Windows

  2. MySQL-OPDATERING ved hjælp af IF-tilstand

  3. Deltag vs. underforespørgsel

  4. Hvad er brugen af ​​DECODE-funktionen i SQL?