Solusi yang Anda usulkan sudah benar. Atau lebih tepatnya, ini adalah salah satu dari beberapa implementasi yang benar. Salah satu dari yang berikut ini akan berfungsi:
- Simpan stempel waktu UTC di satu bidang, simpan offset di bidang lain.
- Simpan stempel waktu lokal di satu bidang, simpan offset di bidang lain.
- Simpan
datesetempat dalam satu bidang, dan simpantime with time zonedi lain. (meskipuntime with time zoneumumnya tidak disarankan...) - Simpan stempel waktu UTC di satu bidang dan stempel waktu lokal di bidang lain.
Yang paling mudah sejauh ini adalah yang pertama, yang sudah Anda usulkan.
Saya akan menghindari menyimpan cap waktu di text bidang, karena cenderung tidak dapat ditelusuri dengan sangat efisien.
Perhatikan juga - jika Anda berasal dari latar belakang SQL Server, Anda mungkin mengingat datetimeoffset type, yang menyimpan waktu dan offset lokal di bidang, dan menggunakan setara UTC selama pengindeksan. Sudah umum untuk berpikir bahwa timestamp with time zone akan memiliki perilaku yang sama, tetapi mereka tidak. Mereka cukup menggunakan sesi zona waktu untuk mengkonversi ke/dari UTC. SQL Server tidak memiliki konsep zona waktu sesi, dan dengan demikian perbedaannya.
Pastikan untuk membaca bagian ini dari dokumen Postgres .