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
date
setempat dalam satu bidang, dan simpantime with time zone
di lain. (meskipuntime with time zone
umumnya 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 .