Предложеното от вас решение е правилно. Или по-точно, това е една от няколкото правилни реализации. Всяко от следните ще работи:
- Съхранявайте 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 .