AT TIME ZONE při použití na timestamp without timezone vytvoří timestamp with timezone (a naopak). A toto timestamp with timezone je interpretováno v časovém pásmu vaší relace (které je ve vašem případě nuceno na UTC ).
Takže výraz EXTRACT (dow from time at time zone 'Brisbane/Australia') neextrahuje den v Brisbane v time (UTC) , extrahuje den odpovídající převedenému time z pohledu někoho, kdo virtuálně žije v časovém pásmu UTC.
Jako příklad, když to píšu, když předstírám, že jsem v UTC:
=> set timezone to 'UTC';
=> select now(),now() at time zone 'Australia/Brisbane';
now | timezone
------------------------------+---------------------------
2013-10-27 18:01:03.15286+00 | 2013-10-28 04:01:03.15286
Dobře, je neděle 18:01 v UTC a pondělí 4:01 v Brisbane
Ale pokud použijete posunutí časového pásma na timestamp without timezone :
select now(),now()::timestamp at time zone 'Australia/Brisbane';
now | timezone
-------------------------------+-------------------------------
2013-10-27 18:01:57.878541+00 | 2013-10-27 08:01:57.878541+00
Všimněte si, jak se druhý sloupec liší od předchozího výsledku. Ve skutečnosti je to 20 hodin volna od Brisbane vyjádřeno v UTC:je to pravděpodobně technicky správná odpověď na otázku, která nedává moc smysl.
Pravděpodobně chcete toto:
EXTRACT (dow from (time AT TIME ZONE 'UTC') at time zone 'Brisbane/Australia')=0
která by měla odpovědět:dělá datum a čas time měřeno v UTC odpovídá neděli v Brisbane?