2011-06-27 19 views
8

¿Cuál es una forma rápida y fácil de corregir los campos de zona horaria TIMESTAMP WITH TIME ZONE ingresados ​​accidentalmente en el huso horario incorrecto?Desfase de zona horaria de actualización de PostgreSQL

En mi caso, fueron los siguientes registros de entrada por error en UTC en lugar de en los Estados Unidos/Pacífico:

  t0   |   t1   |  what 
------------------------+------------------------+--------------- 
2011-06-01 13:00:00+00 | 2011-06-01 13:10:00+00 | recalibrating 
2011-06-01 13:10:00+00 | 2011-06-01 13:45:00+00 | verifying 
2011-06-01 13:45:00+00 | 2011-06-01 13:55:00+00 | FAULT 

Afortunadamente, ninguno de los registros erróneos cruzar los límites de horario de verano, por lo que dos UTC puede simplemente ser corregido como 2 en punto del Pacífico.

Respuesta

9
UPDATE <table> SET <timestamptz_field> = (<timestamptz_field> AT TIME ZONE 'UTC') AT TIME ZONE '<correct_time_zone>'; 
5

Hay moldes y, más importante, el operador at time zone, que son útiles para este tipo de cosas, por ejemplo .:

test=# select now(), 
       now()::timestamp; 

       now    |   now    
-------------------------------+---------------------------- 
2011-06-27 14:32:04.169292+02 | 2011-06-27 14:32:04.169292 
(1 row) 

test=# select now() at time zone 'utc', 
      (now() at time zone 'utc')::timestamp with time zone; 

      timezone   |   timezone    
----------------------------+------------------------------- 
2011-06-27 12:32:28.430479 | 2011-06-27 12:32:28.430479+02 
(1 row) 
Cuestiones relacionadas