Předpokládám, že máte sloupec s názvem ct který má typ TIMESTAMPTZ v tabulce t . Pak můžete použít:
SELECT EXTRACT(TIMEZONE FROM ct) FROM t;
získat posun časového pásma v sekundách. To vám dává 3600 z UTC /GMT to znamená buď GMT+1 , CET nebo cokoli jiného. Vrácená hodnota závisí na vašem TIMEZONE nastavení.
Ukázka (žiji v Německu, aktuální časové pásmo je 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
Jak můžete vidět, vždy vypíše cokoliv v nakonfigurovaném časovém pásmu. Takže offset získáte pomocí EXTRACT(TIMEZONE FROM ...) závisí na vašem TIMEZONE nastavení. Časové pásmo zadané v INSERT je ztracen, protože nestojí za to být spasen. Důležité je, že je vše v pořádku a nemělo by to záviset na TIMEZONE nastavení. PostgreSQL to umí velmi dobře.