AT TIME ZONE
lorsqu'il est appliqué à un timestamp without timezone
produit un timestamp with timezone
(et dans l'autre sens). Et cet timestamp with timezone
est interprété dans le fuseau horaire de votre session (qui dans votre cas est forcé à UTC
).
Donc l'expression EXTRACT (dow from time at time zone 'Brisbane/Australia')
n'extrait pas le jour à Brisbane à time
(UTC) , il extrait le jour correspondant à l'time
convertie du point de vue de quelqu'un vivant virtuellement dans le fuseau horaire UTC.
Par exemple, lorsque je tape ceci, si je fais semblant d'être en 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
Bien, c'est dimanche 18h01 en UTC et lundi 04h01 à Brisbane
Mais si vous appliquez le déplacement du fuseau horaire à 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
Remarquez comment la deuxième colonne diffère du résultat précédent. Il s'agit en fait de 20 heures de Brisbane exprimées en UTC :c'est probablement la réponse techniquement correcte à une question qui n'a pas beaucoup de sens.
Vous voulez probablement ceci :
EXTRACT (dow from (time AT TIME ZONE 'UTC') at time zone 'Brisbane/Australia')=0
qui devrait répondre :est-ce que la date et l'heure time
tel que mesuré en UTC correspond à un dimanche à Brisbane ?