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

Postgres предотвратява клеймото с преобразуване на часовата зона

Предложеното от вас решение е правилно. Или по-точно, това е една от няколкото правилни реализации. Всяко от следните ще работи:

  • Съхранявайте UTC клеймото за време в едно поле, съхранявайте отместването в друго.
  • Съхранявайте локалното времево клеймо в едно поле, съхранявайте отместването в друго.
  • Съхранявайте местната date в едно поле и съхранете time with time zone в друг. (въпреки че time with time zone обикновено се обезсърчава...)
  • Съхранявайте UTC клеймото за време в едно поле и местното клеймо за време в друго.

Най-лесният досега е първият, който вече предложихте.

Бих избегнал съхраняването на времеви отпечатъци в text полета, тъй като те обикновено не могат да се търсят много ефективно.

Също така имайте предвид - ако идвате от опит в SQL Server, може да си спомните неговия datetimeoffset тип, който съхранява локалната дата-час и отместването в полето и използва UTC еквивалента по време на индексирането. Обичайно е да се мисли, че Postgres и MySQL timestamp with time zone биха имали същото поведение, но не го правят. Те просто използват сесията часова зона за конвертиране към/от UTC. SQL Server няма концепция за часова зона на сесия и следователно несъответствието.

Не забравяйте да прочетете тази част от документите на Postgres .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вземете разликата на друго поле между първия и последния времеви отпечатъци на групирането

  2. Трябва да присвоя всички дейности в SQL на един идентификатор, но в момента всяка дейност има три идентификатора

  3. PostgreSQL 10 на Linux - LC_COLLATE локал en_US.utf-8 не е валиден

  4. Извличане на стойност на xml таг в PostgreSQL

  5. Преобразувайте рекурсивна функция в изглед