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

Serwery rozproszone geograficznie, PostgreSQL i JPA

Rozwiązaniem jest użycie pól TIMESTAMPTZ dla tych chwil w czasie. Coś w rodzaju "kiedy utworzono użytkownika" nigdy nie powinno być przechowywane z polem TIMESTAMP, ponieważ domyślnie nie przechowuje informacji TZ. Sterownik JDBC obsługuje je całkiem arbitralnie. Weźmy na przykład pod uwagę następujące kwestie:

Załóżmy, że Twoja maszyna JVM znajduje się w strefie America/Los_Angeles, podczas gdy serwer bazy danych jest w czasie UTC.

Następnie utwórz następującą tabelę:

 CREATE TABLE test (
   id   INTEGER,
   ts   TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
   tswz TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
 );

Jeśli wydajesz z PSQL:

 INSERT INTO test(id) values(1);

Otrzymasz identyczne wartości dla „ts” i „tswz”. Oba będą aktualnym czasem UTC. Jeśli jednak wykonasz zapytanie SAME EXACT z Javy za pomocą sterownika JDBC, „ts” będzie bieżącym czasem w Los Angeles, a „tswz” będzie czasem UTC.

Nie wiem, JAK sterownik przekazuje serwerowi strefę czasową JVM w tym przypadku, ponieważ domyślnie ustawiamy pole na serwerze. Mówią, że nie ustawiają strefy czasowej na sesję, ale muszą. Tak czy inaczej, jeśli użyjesz pola TIMESTAMPTZ, otrzymasz te same chwile z dowolnej JVM, niezależnie od strefy czasowej, w której się znajduje.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. php jak używać pola wyboru do wyszukiwania danych w widoku listy (tabela)

  2. Kontynuuj transakcję Postgres z wyjątkami w Javie

  3. Jak zintegrować PostgreSql z EntityFramework 6.0.2?

  4. Usuwanie rekordów ze zdalnej bazy postgresql przy użyciu lokalnie dostarczonej listy

  5. Jak filtrować zapytania postgis na podstawie ST_GeometryType?