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

Czy należy przechowywać strefę czasową oddzielnie od sygnatury czasowej Postgres i JDBC?

Kiedy zapisujesz timestamp with time zone (timestamptz ) jest konwertowany na czas UTC w celu przechowywania w bazie danych. Po pobraniu jest konwertowany na bieżącą strefę czasową klienta, a nie strefę czasową, w której był pierwotnie. Zasadniczo jest to punkt w czasie.

Istnieje również timestamp without time zone (timestamptz ). Nie podlega konwersji, ale nie nosić przy sobie znacznik czasu. Jeśli przechowujesz timestamp ze strefą czasową klienta ustawioną na UTC, a następnie pobierz ją, gdy strefa czasowa klienta to „+08:00”, otrzymasz tę samą wartość. To połowa tego, czego chcesz, ponieważ zachowuje surową wartość czasu.

Nazwy i zachowania są okropne i mylące, ale określone przez standard SQL.

Strefę czasową należy zapisać oddzielnie, jeśli chcesz zarejestrować punkt w określonej strefie czasowej. Zalecam przechowywanie go jako INTERVAL z CHECK ograniczenie ograniczające ją do colname BETWEEN INTERVAL '-12' HOUR + INTERVAL '1' SECOND AND INTERVAL '12' HOUR . Ta definicja odrzuca -12:00 i akceptuje +12:00; Nie jestem do końca pewien, czy to prawda, więc sprawdź.

Możesz przechowywać timestamp czasu lokalnego w tej strefie czasowej (co prawdopodobnie bym zrobił) lub przechowywać timestamptz czasu UTC, w którym wystąpiło zdarzenie, plus przesunięcie, które pozwala przekonwertować je na czas lokalny.

Albo będzie działać dobrze dla JDBC. W przypadku JPA będzie to zależeć od tego, jak dobrze Twój dostawca rozumie i mapuje typy interwałów. Idealnie potrzebujesz pola wygenerowanego w sposób przejściowy w swojej encji, które rekonstruuje żądaną instancję Kalendarza przy użyciu timestamp i interval przechowywane w bazie danych.



  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 napisać tabelę w PostgreSQL z R?

  2. Funkcje refaktoryzacji, aby można było ich używać w ramach CTE

  3. Jak znaleźć zduplikowane rekordy w PostgreSQL

  4. Django z aplikacją PostgreSQL na Heroku nie synchronizuje się

  5. Jak zmapować nazwy stref czasowych Railsów na PostgreSQL?