Questo è trattato nel manuale , ma non è sempre ovvio come lavorare effettivamente con date/orari. Le specifiche SQL sono un po' bizzarre.
Nel caso della tua domanda non è chiaro se desideri memorizzare l'ora in UTC ma visualizzarla nell'ora locale del server (TimeZone ), o se vuoi ignorare TimeZone e visualizzalo sempre come UTC. Presumo quest'ultimo.
Per i timestamp dovresti semplicemente usare AT TIME ZONE due volte, come:
SELECT TIMESTAMP '2013-08-13 00:00:00' AT TIME ZONE 'Australia/Sydney' AT TIME ZONE 'UTC';
Devi usare AT TIME ZONE due volte. Una volta per convertire il timestamp di input a timestamptz in base all'argomento timezone, quindi un altro per convertirlo in un timestamp alle UTC.
Sfortunatamente a causa del modo (folle dell'IMO) in cui le specifiche SQL definiscono AT TIME ZONE per TIME , non puoi fare la stessa cosa per TIME . Dovrai manipolare il TimeZone variabile invece:
SET TimeZone = 'UTC';
SELECT TIME '07:00' AT TIME ZONE 'Australia/Sydney';
Questo ti lascia ancora con un timetz non un time . Quindi il suo valore visualizzato cambia con il timezone impostazione.