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

Географски разпръснати сървъри, PostgreSQL и JPA

Решението е да се използват полета TIMESTAMPTZ за тези моменти във времето. Нещо като "кога е създаден потребителят" никога не трябва да се съхранява с поле TIMESTAMP, тъй като по подразбиране то не съдържа TZ информация. JDBC драйверът ги обработва доста произволно. Например, помислете за следното:

Да приемем, че вашата JVM е в зоната America/Los_Angeles, докато вашият сървър на база данни е в UTC.

След това създайте следната таблица:

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

Ако издавате от PSQL:

 INSERT INTO test(id) values(1);

Ще получите еднакви стойности за "ts" и "tswz". И двете ще бъдат текущото UTC време. Ако обаче изпълните СЪЩАТА ТОЧНА заявка от Java с помощта на JDBC драйвера, тогава "ts" ще бъде текущото време в Лос Анджелис, а "tswz" ще бъде UTC времето.

Не знам КАК драйверът предава на сървъра JVM часовата зона в този случай, защото ние сме по подразбиране на полето на сървъра. Те казват, че не определят часовата зона за сесията, но трябва. Така или иначе, ако използвате поле TIMESTAMPTZ, тогава ще получите същите моменти от всяка JVM, независимо от това в коя часова зона се намира.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Създаване на временни таблици в SQL

  2. PostgreSQL TypeError:не всички аргументи са преобразувани по време на форматиране на низ

  3. Как променяте кодирането на знаци на база данни на Postgres?

  4. Как да изброим всички активирани роли за всички потребители в PostgreSQL?

  5. наистина ли postgres ще актуализира файла на страницата, когато всички полета са равни преди и след актуализация?