sql >> Databáze >  >> RDS >> PostgreSQL

Postgres zabraňuje časovému razítku převodem časového pásma

Vámi navrhované řešení je správné. Přesněji řečeno, je to jedna z několika správných implementací. Fungovalo by kterékoli z následujících:

  • Uložte časové razítko UTC do jednoho pole, uložte posun do jiného.
  • Uložte místní časové razítko v jednom poli uložte posun do jiného.
  • Uložte místní date v jednom poli a uložte time with time zone v jiném. (ačkoli time with time zone se obecně nedoporučuje...)
  • Uložte časová razítka UTC do jednoho pole a místní časové razítko do druhého.

Zdaleka nejjednodušší je ten první, který jste již navrhli.

Vyhnul bych se ukládání časových razítek v text pole, protože nebývají moc efektivně prohledávatelná.

Také si všimněte – pokud přicházíte z prostředí SQL Server, můžete si vzpomenout na jeho datetimeoffset typ, který ukládá místní datum a čas a offset v poli a používá ekvivalent UTC během indexování. Je běžné si myslet, že Postgres a MySQL timestamp with time zone budou mít stejné chování, ale nemají. Jednoduše použijí relaci časové pásmo pro převod do/z UTC. SQL Server nemá žádnou koncepci časového pásma relace, a tedy nesrovnalosti.

Nezapomeňte si přečíst tuto část dokumentů Postgres .




  1. Import MySQL 5.7.12 nemůže vytvořit hodnotu JSON z řetězce s CHARACTER SET 'binary'

  2. Chyba Při připojování k Oracle TNS:listener aktuálně neví o službě požadované v deskriptoru připojení

  3. Každopádně omezit dobu provádění dotazu MySQL?

  4. Získávání náhodných dat z databáze MySQL, ale neopakování dat