Re: timestamp out of range

From: Guillermo Muñoz <guillermo(dot)munoz(at)grupotekne(dot)com(dot)ar>
To: "Alvaro Herrera" <alvherre(at)commandprompt(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: timestamp out of range
Date: 2007-09-21 14:07:00
Message-ID: 002e01c7fc58$ae5005b0$2601010a@gg07030802
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Alvaro
Estos datos son importados desde DBF en texto con formato YYYY-MM-DD a una base de datos que tiene los campos character varying(10)
despues se pasan a otra base en el mismo servidor, convirtiendolos a date (antes estaban como timestamp)
case when trim(f_nac)='0-00-00' then null else cast(f_nac as date) end as f_nac --falla
case when trim(f_nac)='0-00-00' then null else f_nac::date end as f_nac --falla
esta es la conversion, la fecha '0-00-00' es la nula. ahora estoy usando cast(f_nac as date) pero ya probe con f_nac::date y tampoco funciono.
en las fecha no hay valores extraños: o es una fecha o '0-00-00'.
Otro dato, el error es aleatoreo. ejecutas la consulta tira el error dos segundos despues ejecuta bien y ni hablar si lo hago en otra pc.

Cumplo con pasarte lo que me pedis:
Estructura de los campos
f_nac character varying(10),
show datestyle;
"ISO, MDY"
show integer_datetimes;
"off"
select ctid, '{' || f_nac || '}', trim(f_nac),
trim(f_nac)::timestamp without time zone,trim(f_nac)::date
from afi301 where f_nac like '1983%';

1ra ejecucion:
(200,3);"{1983-04-05}";"1983-04-05";"1983-04-05 00:00:00";"1983-04-05"
(200,18);"{1983-09-12}";"1983-09-12";"1999-12-31 -142896:00:00";"1983-09-12"
(201,16);"{1983-08-23}";"1983-08-23";"1983-08-23 00:00:00";"1983-08-23"
(202,9);"{1983-06-07}";"1983-06-07";"1983-06-07 00:00:00";"1983-06-07"

el primer registro sale en la posicion (fila) 99 (200,18)

2da ejecucion:
la vuelvo a ejecutar
(200,3);"{1983-04-05}";"1983-04-05";"1983-04-05 00:00:00";"1983-04-05"
(200,18);"{1983-09-12}";"1983-09-12";"1983-09-12 00:00:00";"1983-09-12"
(201,16);"{1983-08-23}";"1983-08-23";"1983-08-23 00:00:00";"1983-08-23"

ahora esta bien el registro de la fila 99 (200,18), pero ahora el primer registro roto esta en la fila 135 (274,16)

(274,5);"{1983-01-27}";"1983-01-27";"1983-01-27 00:00:00";"1983-01-27"
(274,16);"{1983-01-20}";"1983-01-20";"1999-12-31 -148536:00:00";"1983-01-20"
(275,2);"{1983-05-22}";"1983-05-22";"1983-05-22 00:00:00";"1983-05-22"

Como explique no tengo un patron y la unica documentacion que hay en postgres es que son registros corruptos. pero ya pase vacuum full ,analize y nada, borre indices porque es una tabla de 2 millones de resitros

Saludos
Guillermo Muñoz

----- Original Message -----
From: Alvaro Herrera
To: Guillermo Muñoz
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Sent: Thursday, September 20, 2007 9:19 PM
Subject: Re: [pgsql-es-ayuda] timestamp out of range

Guillermo Muñoz escribió:
> Tengo un problema con los timestamp, el caso es este:
> tengo estos datos como varchar
> "1984-06-14"
> "1983-02-21"
> "1989-06-13"
> si les hago (trim(f_nac))::timestamp without time zone, me quedan
> "1984-06-14 00:00:00"
> "1999-12-31 -147768:00:00"
> "1989-06-13 00:00:00"
>
> el segundo caso deberia ser 1983-02-21 00:00:00 y la consulta da error
> por timestamp out of range si uso cast(f_nac as date) aparentemente
> no tengo problemas, el caso es que la tabla tiene 2 millones de
> registros y este error empezo de un dia a otro y no tengo un patron es
> aleatoreo. y aparentemente esta pasando en otras tabla que tambien
> tiene fechas que algunas llegan a los 11 millones de registro.

Uff. Guardar fechas en campos varchar es pesima idea, precisamente por
problemas como este.

Tengo la sensacion de que hay alguna conversion que se esta haciendo de
una manera inesperada. Por favor envia la salida de lo siguiente:

show datestyle;
show integer_datetimes;

select ctid, '{' || fnac || '}', trim(fnac),
trim(f_nac)::timestamp without time zone
from tabla where fnac like '1983%';

Lo que quiero saber es si esa fecha de 1999 que tiene las horas erroneas
equivale a la de 1983-02-21.

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

--
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.485 / Virus Database: 269.13.21/1012 - Release Date: 16/09/2007 06:32 p.m.

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Edwin Quijada 2007-09-21 14:13:39 RE: RES: Ayuda tuning PG 8.24
Previous Message Alvaro Herrera 2007-09-21 13:59:22 Re: Que es o que hace el ctid ??