PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

jOOQ Timestamp се съхранява с местно отместване на часовата зона

За съжаление имате няколко неща, които работят срещу вас:

  1. Драйверът PostgreSQL JDBC задава часовата зона на вашата JVM часова зона в сесията на Postgres. Така че дори ако вашият сървър на база данни работи в UTC, полето TIMESTAMP ще бъде вмъкнато, като се използва часовата зона на вашата JVM. Когато вмъквате или заявявате данни, сървърът на базата данни винаги ще използва JVM часовата зона.
  2. Използвате TIMESTAMP вместо TIMESTAMPTZ. Описанието на тези видове не отразява действителната им употреба. TIMESTAMPTZ всъщност означава агностик на часовата зона. Каквато и стойност да вмъкнете, тя ще бъде коригирана към UTC с помощта на часовата зона на сесията.

Поради тези два проблема, ако имате две различни JVM - едната използва времето в Лос Анджелис, а другата използва времето в Ню Йорк - винаги, когато пишете TIMESTAMP с една JVM, това ще бъде различно "UTC време" в другата JVM. TIMESTAMP взема коригираната стойност и просто я използва, както е дадена. Ако промените вашите колони TIMESTAMP на TIMESTAMPTZ, тогава едно и също време в двете JVM винаги ще бъде едно и също UTC време.

Ако погледнете ConnectionFactoryImpl#openConnectionImp на JDBC драйвера на Postgres, можете да видите къде задава вашата локална JVM часова зона като часова зона за зоната на сесията на сървъра на базата данни.

Така че единственият разумен начин да се справите с това е да използвате само TIMESTAMPTZ вместо TIMESTAMP. Ето малко повече информация за това:

PostgreSQL/JDBC и TIMESTAMP срещу 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. Как да вмъкнете и изтриете данни в PostgreSQL

  2. Първичен ключ за множество колони в PostgreSQL?

  3. PostgreSQL, Npgsql връща 42601:синтактична грешка при или близо до $1

  4. Актуализирайте PostgreSQL масив с помощта на SQLAlchemy

  5. postgresql timestamp към std::chrono стойност