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

Трябва ли да съхранявам часовата зона отделно от клеймото за Postgres и JDBC?

Когато съхранявате timestamp with time zone (timestamptz ) се преобразува в UTC за съхранение в DB. Когато бъде извлечен, той се преобразува в текущата часова зона на клиента, а не в часовата зона, в която е бил първоначално. По принцип това е момент във времето.

Има също timestamp without time zone (timestamp ). Това не подлежи на преобразуване, но не носете клеймо за време със себе си. Ако съхраните timestamp с часовата зона на клиента, зададена на UTC, след това го извлечете, когато часовата зона на клиента е „+08:00“, получавате същата стойност. Това е половината от това, което искате, тъй като запазва стойността на необработеното време.

Имената и поведението са ужасни и объркващи, но определени от SQL стандарта.

Трябва да съхраните часовата зона отделно, ако искате да запишете момент от време в определена часова зона. Бих препоръчал да го съхранявате като INTERVAL с CHECK ограничение, което го ограничава да бъде colname BETWEEN INTERVAL '-12' HOUR + INTERVAL '1' SECOND AND INTERVAL '12' HOUR . Тази дефиниция отхвърля -12:00 и приема +12:00; Не съм напълно сигурен, че е правилно, така че проверете.

Можете или да съхраните timestamp местно време в тази часова зона (което вероятно бих направил), или да запазя timestamptz от UTC времето, когато е настъпило събитието, плюс отместване, което ви позволява да го конвертирате в местно време.

И двете ще работят добре за JDBC. За JPA ще зависи от това колко добре вашият доставчик разбира и картографира типовете интервали. В идеалния случай искате преходно генерирано поле във вашия обект, което реконструира екземпляра на Календар, който искате, като използва timestamp и interval съхранявани в базата данни.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JPA 2:използване на множество колони във външни ключове

  2. Най-добри практики за обработка на релации между таблици в Spring Data R2dbc

  3. Rails 3 игнорира изключение за уникално ограничение на Postgres

  4. Работен процес за обработка на последователни миграции и инициализация?

  5. За да игнорирате дублирани ключове по време на „копиране от“ в postgresql