AT TIME ZONE
när den tillämpas på en timestamp without timezone
producerar en timestamp with timezone
(och tvärtom). Och denna timestamp with timezone
tolkas i din sessions tidszon (som i ditt fall tvingas till UTC
).
Alltså uttrycket EXTRACT (dow from time at time zone 'Brisbane/Australia')
extraherar inte dagen i Brisbane vid time
(UTC) , extraherar den dagen som motsvarar den konverterade time
ur synvinkeln av någon som praktiskt taget bor i UTC-tidszonen.
Som ett exempel, när jag skriver detta, om jag låtsas vara i 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
Okej, det är söndag 18:01 i UTC och måndag 04:01 i Brisbane
Men om man tillämpar tidszonsförskjutningen på en 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
Lägg märke till hur den andra kolumnen skiljer sig från föregående resultat. Det är faktiskt 20 timmar ledigt från Brisbane uttryckt i UTC:det är förmodligen det tekniskt korrekta svaret på en fråga som inte är särskilt vettig.
Förmodligen vill du ha det här:
EXTRACT (dow from (time AT TIME ZONE 'UTC') at time zone 'Brisbane/Australia')=0
som ska svara:gör datum och tid time
som mätt i UTC motsvarar en söndag i Brisbane?