Suponho que você tenha uma coluna chamada
ct
que tem o tipo TIMESTAMPTZ
na tabela t
. Então você pode usar:SELECT EXTRACT(TIMEZONE FROM ct) FROM t;
para obter o deslocamento do fuso horário em segundos. É o que lhe dá
3600
de UTC
/GMT
isso significa que GMT+1
, CET
como queiras. O valor retornado depende do seu TIMEZONE
contexto. Exemplo (moro na Alemanha, fuso horário real é
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
Como você pode ver, sempre gera qualquer coisa no fuso horário configurado. Portanto, o deslocamento que você obterá com
EXTRACT(TIMEZONE FROM ...)
depende do seu TIMEZONE
contexto. O fuso horário que foi fornecido em INSERT
está perdido, porque não vale a pena ser salvo. O que conta é que tudo está correto e isso não deve depender do TIMEZONE
contexto. O PostgreSQL faz isso muito bem.