AT TIME ZONE
quando applicato a un timestamp without timezone
produce un timestamp with timezone
(e viceversa). E questo timestamp with timezone
viene interpretato nel fuso orario della tua sessione (che nel tuo caso è forzato a UTC
).
Quindi l'espressione EXTRACT (dow from time at time zone 'Brisbane/Australia')
non estrae il giorno a Brisbane alle time
(UTC) , estrae il giorno corrispondente all'time
convertita dal punto di vista di qualcuno che vive virtualmente nel fuso orario UTC.
Ad esempio, quando sto digitando questo, se fingo di essere in 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
Bene, sono le 18:01 di domenica in UTC e le 04:01 di lunedì a Brisbane
Ma se si applica lo spostamento del fuso orario a un 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
Nota come la seconda colonna differisce dal risultato precedente. In realtà sono 20 ore fuori Brisbane espresse in UTC:presumibilmente è la risposta tecnicamente corretta a una domanda che non ha molto senso.
Presumibilmente vuoi questo:
EXTRACT (dow from (time AT TIME ZONE 'UTC') at time zone 'Brisbane/Australia')=0
che dovrebbe rispondere:fa la data e l'ora time
come misurato in UTC corrisponde a una domenica a Brisbane?