PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Postgres zapobiega znacznikowi czasu z konwersją strefy czasowej

Zaproponowane przez Ciebie rozwiązanie jest poprawne. A dokładniej jest to jedna z kilku poprawnych implementacji. Dowolna z poniższych czynności będzie działać:

  • Zapisz znacznik czasu UTC w jednym polu, a przesunięcie w innym.
  • Zapisz lokalną sygnaturę czasową w jednym polu zapisz przesunięcie w innym.
  • Zapisz lokalną date w jednym polu i zapisz time with time zone winnym. (chociaż time with time zone jest ogólnie odradzany...)
  • Przechowuj znaczniki czasu UTC w jednym polu, a lokalny znacznik czasu w innym.

Zdecydowanie najłatwiejszy jest ten pierwszy, który już zaproponowałeś.

Unikałbym przechowywania znaczników czasu w text pola, ponieważ zwykle nie można ich przeszukiwać zbyt efektywnie.

Uwaga - jeśli przechodzisz z tła SQL Server, możesz przypomnieć sobie jego datetimeoffset typ, który przechowuje lokalną datę i godzinę oraz przesunięcie w polu, a podczas indeksowania używa odpowiednika UTC. Powszechnie uważa się, że timestamp with time zone w Postgres i MySQL zachowywaliby się tak samo, ale tak nie jest. Po prostu używają sesji strefa czasowa do konwersji na/z UTC. SQL Server nie ma koncepcji strefy czasowej sesji, a tym samym rozbieżności.

Koniecznie przeczytaj tę część dokumentacji Postgres .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać zapytanie date_part, aby trafić na indeks?

  2. Indeksowanie SQL na varchar

  3. Maksymalny rozmiar transakcji w PostgreSQL

  4. Nie można utworzyć nowej tabeli po publicznym DROP SCHEMA

  5. Rails / Postgres:„musi pojawić się w klauzuli GROUP BY lub być użyty w funkcji agregującej”