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

jOOQ Znacznik czasu jest przechowywany z lokalnym przesunięciem strefy czasowej

Niestety kilka rzeczy działa przeciwko tobie:

  1. Sterownik PostgreSQL JDBC ustawia strefę czasową na strefę czasową JVM w sesji Postgres. Tak więc nawet jeśli serwer bazy danych działa w czasie UTC, pole TIMESTAMP zostanie wstawione przy użyciu strefy czasowej JVM. Kiedy wstawiasz lub wysyłasz zapytanie o dane, serwer bazy danych zawsze będzie używał strefy czasowej JVM.
  2. Używasz TIMESTAMP zamiast TIMESTAMPTZ. Opis tych typów nie odzwierciedla ich faktycznego zastosowania. TIMESTAMPTZ w rzeczywistości oznacza agnostykę strefy czasowej. Każda wstawiona wartość zostanie dostosowana do czasu UTC przy użyciu strefy czasowej sesji.

Z powodu tych dwóch problemów, jeśli masz dwie różne maszyny JVM — jedna korzystająca z czasu Los Angeles, a druga z czasu nowojorskiego — za każdym razem, gdy napiszesz TIMESTAMP z jedną JVM, będzie to inny „czas UTC” w drugiej JVM. TIMESTAMP przyjmuje dostosowaną wartość i po prostu używa jej zgodnie z podaną. Jeśli zmienisz kolumny TIMESTAMP na TIMESTAMPTZ, ten sam czas w obu maszynach JVM będzie zawsze tym samym czasem UTC.

Jeśli spojrzysz na ConnectionFactoryImpl#openConnectionImp sterownika Postgres JDBC, zobaczysz, gdzie ustawia on strefę czasową lokalnej maszyny JVM jako strefę czasową dla strefy sesji serwera bazy danych.

Więc jedynym rozsądnym sposobem radzenia sobie z tym jest używanie tylko TIMESTAMPTZ zamiast TIMESTAMP. Oto więcej informacji na ten temat:

PostgreSQL/JDBC i TIMESTAMP vs. TIMESTAMPTZ

http://justatheory.com/computers/databases/postgresql/use-timestamptz .html



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Indeks złożony z trzema kluczami, co się stanie, jeśli zapytanie pominie środkowy?

  2. Czy hibernacja powinna używać unikalnych sekwencji dla każdej tabeli?

  3. Czy Alembic może automatycznie generować zmiany w kolumnach?

  4. Utwórz niezmienny klon concat_ws

  5. Konwertuj hstore postgresql na tablicę php