AT TIME ZONE
cuando se aplica a una timestamp without timezone
produce una timestamp with timezone
(Y a la inversa). Y esta timestamp with timezone
se interpreta en la zona horaria de su sesión (que en su caso está forzada a UTC
).
Entonces, la expresión EXTRACT (dow from time at time zone 'Brisbane/Australia')
no extrae el día en Brisbane a la time
(UTC) , extrae el día correspondiente a la time
convertida desde el punto de vista de alguien que vive virtualmente en la zona horaria UTC.
Como ejemplo, cuando escribo esto, si pretendo estar 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, es el domingo a las 18:01 en UTC y el lunes a las 04:01 en Brisbane
Pero si se aplica el desplazamiento de la zona horaria a una 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
Observe cómo la segunda columna difiere del resultado anterior. En realidad, son 20 horas menos que Brisbane expresadas en UTC:presumiblemente es la respuesta técnicamente correcta a una pregunta que no tiene mucho sentido.
Presumiblemente quieres esto:
EXTRACT (dow from (time AT TIME ZONE 'UTC') at time zone 'Brisbane/Australia')=0
que debería responder:la fecha y la hora time
como se mide en UTC corresponde a un domingo en Brisbane?