Zaproponowane przez Ciebie rozwiązanie jest poprawne. A dokładniej jest to jedna z kilku poprawnych implementacji. Dowolna z poniższych czynności będzie działać:
- Zapisz znacznik czasu UTC w jednym polu, a przesunięcie w innym.
- Zapisz lokalną sygnaturę czasową w jednym polu zapisz przesunięcie w innym.
- Zapisz lokalną
date
w jednym polu i zapisztime with time zone
winnym. (chociażtime with time zone
jest ogólnie odradzany...) - Przechowuj znaczniki czasu UTC w jednym polu, a lokalny znacznik czasu w innym.
Zdecydowanie najłatwiejszy jest ten pierwszy, który już zaproponowałeś.
Unikałbym przechowywania znaczników czasu w text
pola, ponieważ zwykle nie można ich przeszukiwać zbyt efektywnie.
Uwaga - jeśli przechodzisz z tła SQL Server, możesz przypomnieć sobie jego datetimeoffset
typ, który przechowuje lokalną datę i godzinę oraz przesunięcie w polu, a podczas indeksowania używa odpowiednika UTC. Powszechnie uważa się, że timestamp with time zone
w Postgres i MySQL zachowywaliby się tak samo, ale tak nie jest. Po prostu używają sesji strefa czasowa do konwersji na/z UTC. SQL Server nie ma koncepcji strefy czasowej sesji, a tym samym rozbieżności.
Koniecznie przeczytaj tę część dokumentacji Postgres .