Toto je popsáno v příručce , ale ne vždy je zřejmé, jak vlastně s daty/časy pracovat. Specifikace SQL je trochu bizarní.
V případě vašeho dotazu není jasné, zda chcete ukládat čas v UTC, ale zobrazovat jej v místním čase serveru (TimeZone ), nebo zda chcete ignorovat TimeZone a vždy jej zobrazovat jako UTC. Předpokládám to druhé.
Pro časová razítka stačí použít AT TIME ZONE dvakrát, jako:
SELECT TIMESTAMP '2013-08-13 00:00:00' AT TIME ZONE 'Australia/Sydney' AT TIME ZONE 'UTC';
Musíte použít AT TIME ZONE dvakrát. Jednou pro převod vstupního timestamp na timestamptz podle argumentu timezone, pak další pro převedení na timestamp v UTC.
Bohužel kvůli (IMO šílenému) způsobu, jakým specifikace SQL definuje AT TIME ZONE po dobu TIME , nemůžete udělat totéž pro TIME . Budete muset manipulovat s TimeZone proměnná místo toho:
SET TimeZone = 'UTC';
SELECT TIME '07:00' AT TIME ZONE 'Australia/Sydney';
Stále vám zůstane timetz ne time . Jeho zobrazená hodnota se tedy mění s timezone nastavení.