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ą
datew jednym polu i zapisztime with time zonewinnym. (chociażtime with time zonejest 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 .