Saya berasumsi Anda memiliki kolom bernama ct yang memiliki tipe TIMESTAMPTZ dalam tabel t . Kemudian Anda dapat menggunakan:
SELECT EXTRACT(TIMEZONE FROM ct) FROM t;
untuk mendapatkan offset zona waktu dalam hitungan detik. Itu memberi Anda 3600 dari UTC /GMT itu berarti GMT+1 , CET atau terserah. Nilai yang dikembalikan tergantung pada TIMEZONE Anda pengaturan.
Contoh (Saya tinggal di Jerman, zona waktu sebenarnya adalah GMT+1 /CET ):
test=# select '2008-01-01 12:00:00 GMT+5'::timestamptz;
timestamptz
------------------------
2008-01-01 18:00:00+01
test=# set timezone to 'gmt';
SET
test=# select '2008-01-01 12:00:00 GMT+5'::timestamptz;
timestamptz
------------------------
2008-01-01 17:00:00+00
Seperti yang Anda lihat, selalu menampilkan apa pun di zona waktu yang dikonfigurasi. Jadi offset yang akan Anda dapatkan dengan EXTRACT(TIMEZONE FROM ...) tergantung pada TIMEZONE pengaturan. Zona waktu yang diberikan pada INSERT hilang, karena tidak layak untuk diselamatkan. Yang penting adalah semuanya benar dan tidak bergantung pada TIMEZONE pengaturan. PostgreSQL melakukannya dengan sangat baik.