Ini tercakup dalam manual , tetapi tidak selalu jelas bagaimana cara bekerja dengan tanggal/waktu. Spesifikasi SQL agak aneh.
Dalam kasus pertanyaan Anda, tidak jelas apakah Anda ingin menyimpan waktu dalam UTC tetapi menampilkannya dalam waktu lokal server (TimeZone ), atau apakah Anda ingin mengabaikan TimeZone dan selalu tampilkan sebagai UTC. Saya akan menganggap yang terakhir.
Untuk stempel waktu, Anda cukup menggunakan AT TIME ZONE dua kali, seperti:
SELECT TIMESTAMP '2013-08-13 00:00:00' AT TIME ZONE 'Australia/Sydney' AT TIME ZONE 'UTC';
Anda perlu menggunakan AT TIME ZONE dua kali. Sekali untuk mengonversi input timestamp ke timestamptz sesuai dengan zona waktu argumen, lalu yang lain untuk mengonversinya menjadi timestamp di UTC.
Sayangnya karena cara (IMO gila) spesifikasi SQL mendefinisikan AT TIME ZONE untuk TIME , Anda tidak dapat melakukan hal yang sama untuk TIME . Anda harus memanipulasi TimeZone variabel sebagai gantinya:
SET TimeZone = 'UTC';
SELECT TIME '07:00' AT TIME ZONE 'Australia/Sydney';
Ini masih memberi Anda timetz bukan time . Jadi nilai tampilannya berubah dengan timezone pengaturan.