Re: sobre ALTER TABLE

Lists: pgsql-es-ayuda
From: "Mario Reyes \(GENESYS\)" <Genesys3(at)celulosa(dot)cmpc(dot)cl>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: sobre ALTER TABLE
Date: 2008-05-28 04:00:32
Message-ID: 193C3D9A97DDB84EB9A222C56C6B8C09D118AE@CMPCEVS5.cmpc.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Estimados:
Soy nuevo en PostgreSQL, asi es que disculpen si es que el tema por el cual pregunto ha sido consultado anteriormente.
Tengo una BD PostgreSQL 8.2 en mi PC (WinXP) y trabajo con SQL Manager 2007 for PostgreSQL. En una Tabla, por equivocación definí un campo como TIME. Ahora lo quiero cambiar a DATE, sin embargo al generar el siguiente Script aparece un error:

ALTER TABLE "public"."presupuestos" ALTER COLUMN "pres_fecha_inicio" TYPE DATE;

ERROR: column "pres_fecha_inicio" cannot be cast to type "date"

La pregunta por lo tanto es Cual es la manera correcta de hacer el Cast?. He intentado con el USING de acuerdo a la documentación.

ALTER TABLE "public"."presupuestos" ALTER COLUMN "pres_fecha_inicio" TYPE date USING "pres_fecha_inicio"::date;

Sin embargo aparece otro error:
ERROR: cannot cast type time without time zone to date
(0,547 sec)

Cual debiera ser la instrucciòn correcta?

Espero su ayuda.
Atte.
Mario Reyes


From: "Jaime Casanova" <systemguards(at)gmail(dot)com>
To: "Mario Reyes (GENESYS)" <Genesys3(at)celulosa(dot)cmpc(dot)cl>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: sobre ALTER TABLE
Date: 2008-05-28 05:26:33
Message-ID: c2d9e70e0805272226u19c8c909h9875ebd6e5b5064a@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

On Tue, May 27, 2008 at 11:00 PM, Mario Reyes (GENESYS)
<Genesys3(at)celulosa(dot)cmpc(dot)cl> wrote:
>
> ALTER TABLE "public"."presupuestos" ALTER COLUMN "pres_fecha_inicio" TYPE
> DATE;
>
> ERROR: column "pres_fecha_inicio" cannot be cast to type "date"
>
> La pregunta por lo tanto es Cual es la manera correcta de hacer el Cast?. He
> intentado con el USING de acuerdo a la documentación.
>
> ALTER TABLE "public"."presupuestos" ALTER COLUMN "pres_fecha_inicio" TYPE
> date USING "pres_fecha_inicio"::date;
>
> Sin embargo aparece otro error:
> ERROR: cannot cast type time without time zone to date
> (0,547 sec)
>

Si en esa columna aun no has grabado ningun dato, puedes hacer:
ALTER TABLE "public"."presupuestos"
ALTER COLUMN "pres_fecha_inicio" TYPE date USING NULL;

Si ya hay datos, ahi si esta fregada la cosa...

--
Atentamente,
Jaime Casanova
Soporte y capacitación de PostgreSQL
Guayaquil - Ecuador
Cel. (593) 087171157


From: "Marcos Saldivar" <baron(dot)rojo(dot)cuerdas(dot)de(dot)acero(at)gmail(dot)com>
To: "Jaime Casanova" <systemguards(at)gmail(dot)com>
Cc: "Mario Reyes (GENESYS)" <Genesys3(at)celulosa(dot)cmpc(dot)cl>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: sobre ALTER TABLE
Date: 2008-05-28 13:22:32
Message-ID: 1c4d91ab0805280622j1002ceccs322bf9b0f159b83b@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

2008/5/28 Jaime Casanova <systemguards(at)gmail(dot)com>:
> On Tue, May 27, 2008 at 11:00 PM, Mario Reyes (GENESYS)
> <Genesys3(at)celulosa(dot)cmpc(dot)cl> wrote:
>>
>> ALTER TABLE "public"."presupuestos" ALTER COLUMN "pres_fecha_inicio" TYPE
>> DATE;
>>
>> ERROR: column "pres_fecha_inicio" cannot be cast to type "date"
>>
>> La pregunta por lo tanto es Cual es la manera correcta de hacer el Cast?. He
>> intentado con el USING de acuerdo a la documentación.
>>
>> ALTER TABLE "public"."presupuestos" ALTER COLUMN "pres_fecha_inicio" TYPE
>> date USING "pres_fecha_inicio"::date;
>>
>> Sin embargo aparece otro error:
>> ERROR: cannot cast type time without time zone to date
>> (0,547 sec)
>>
>
> Si en esa columna aun no has grabado ningun dato, puedes hacer:
> ALTER TABLE "public"."presupuestos"
> ALTER COLUMN "pres_fecha_inicio" TYPE date USING NULL;
>
> Si ya hay datos, ahi si esta fregada la cosa...

por qué ? acaso no puede hacer un simple drop de esa columna ? me
imagino que si necesita un date, no puede tener mas que poca valides
la info de esa columna si es time y siempre queda la opcion de que
mueve eso datos y luego los restaura...

en que se puede complicar la cosa ???

>
> --
> Atentamente,
> Jaime Casanova
> Soporte y capacitación de PostgreSQL
> Guayaquil - Ecuador
> Cel. (593) 087171157
> --
> TIP 6: ¿Has buscado en los archivos de nuestra lista de correo?
> http://archives.postgresql.org/pgsql-es-ayuda
>


From: "Jaime Casanova" <systemguards(at)gmail(dot)com>
To: "Marcos Saldivar" <baron(dot)rojo(dot)cuerdas(dot)de(dot)acero(at)gmail(dot)com>
Cc: "Mario Reyes (GENESYS)" <Genesys3(at)celulosa(dot)cmpc(dot)cl>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: sobre ALTER TABLE
Date: 2008-05-28 15:14:18
Message-ID: c2d9e70e0805280814i53b29f7eid0e6f551bd374ca1@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

On Wed, May 28, 2008 at 8:22 AM, Marcos Saldivar
<baron(dot)rojo(dot)cuerdas(dot)de(dot)acero(at)gmail(dot)com> wrote:
> 2008/5/28 Jaime Casanova <systemguards(at)gmail(dot)com>:
>> On Tue, May 27, 2008 at 11:00 PM, Mario Reyes (GENESYS)
>> <Genesys3(at)celulosa(dot)cmpc(dot)cl> wrote:
>>>
>>> ALTER TABLE "public"."presupuestos" ALTER COLUMN "pres_fecha_inicio" TYPE
>>> DATE;
>>>
>>> ERROR: column "pres_fecha_inicio" cannot be cast to type "date"
>>>
>>> La pregunta por lo tanto es Cual es la manera correcta de hacer el Cast?. He
>>> intentado con el USING de acuerdo a la documentación.
>>>
>>> ALTER TABLE "public"."presupuestos" ALTER COLUMN "pres_fecha_inicio" TYPE
>>> date USING "pres_fecha_inicio"::date;
>>>
>>> Sin embargo aparece otro error:
>>> ERROR: cannot cast type time without time zone to date
>>> (0,547 sec)
>>>
>>
>> Si en esa columna aun no has grabado ningun dato, puedes hacer:
>> ALTER TABLE "public"."presupuestos"
>> ALTER COLUMN "pres_fecha_inicio" TYPE date USING NULL;
>>
>> Si ya hay datos, ahi si esta fregada la cosa...
>
> por qué ? acaso no puede hacer un simple drop de esa columna ?

si, se puede...
pero el ALTER TABLE tambien funciona con el USING NULL aunque tenga
datos la columna, pero pierde los datos

> imagino que si necesita un date, no puede tener mas que poca valides
> la info de esa columna si es time

ese es mi punto, esos datos son como poco no validos y seguramente no
habra forma segura o confiable de recuperarlos como date... en otras
palabras que ya los perdio...

--
Atentamente,
Jaime Casanova
Soporte y capacitación de PostgreSQL
Guayaquil - Ecuador
Cel. (593) 087171157


From: "Marcos Saldivar" <baron(dot)rojo(dot)cuerdas(dot)de(dot)acero(at)gmail(dot)com>
To: "Jaime Casanova" <systemguards(at)gmail(dot)com>
Cc: "Mario Reyes (GENESYS)" <Genesys3(at)celulosa(dot)cmpc(dot)cl>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: sobre ALTER TABLE
Date: 2008-05-28 15:24:56
Message-ID: 1c4d91ab0805280824gc91804fu2e3a23b87cd88b6@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

2008/5/28 Jaime Casanova <systemguards(at)gmail(dot)com>:
> On Wed, May 28, 2008 at 8:22 AM, Marcos Saldivar
> <baron(dot)rojo(dot)cuerdas(dot)de(dot)acero(at)gmail(dot)com> wrote:
>> 2008/5/28 Jaime Casanova <systemguards(at)gmail(dot)com>:
>>> On Tue, May 27, 2008 at 11:00 PM, Mario Reyes (GENESYS)
>>> <Genesys3(at)celulosa(dot)cmpc(dot)cl> wrote:
>>>>
>>>> ALTER TABLE "public"."presupuestos" ALTER COLUMN "pres_fecha_inicio" TYPE
>>>> DATE;
>>>>
>>>> ERROR: column "pres_fecha_inicio" cannot be cast to type "date"
>>>>
>>>> La pregunta por lo tanto es Cual es la manera correcta de hacer el Cast?. He
>>>> intentado con el USING de acuerdo a la documentación.
>>>>
>>>> ALTER TABLE "public"."presupuestos" ALTER COLUMN "pres_fecha_inicio" TYPE
>>>> date USING "pres_fecha_inicio"::date;
>>>>
>>>> Sin embargo aparece otro error:
>>>> ERROR: cannot cast type time without time zone to date
>>>> (0,547 sec)
>>>>
>>>
>>> Si en esa columna aun no has grabado ningun dato, puedes hacer:
>>> ALTER TABLE "public"."presupuestos"
>>> ALTER COLUMN "pres_fecha_inicio" TYPE date USING NULL;
>>>
>>> Si ya hay datos, ahi si esta fregada la cosa...
>>
>> por qué ? acaso no puede hacer un simple drop de esa columna ?
>
> si, se puede...
> pero el ALTER TABLE tambien funciona con el USING NULL aunque tenga
> datos la columna, pero pierde los datos
>
>> imagino que si necesita un date, no puede tener mas que poca valides
>> la info de esa columna si es time
>
> ese es mi punto, esos datos son como poco no validos y seguramente no
> habra forma segura o confiable de recuperarlos como date... en otras
> palabras que ya los perdio...

entonces que use lo que le recomiendas que es mucho mas elegante que
lo que hacia yop de un drop column y luego un add column je je je

ALTER TABLE "public"."presupuestos" ALTER COLUMN "pres_fecha_inicio"
TYPE date USING NULL;

saludos.-

>
>
> --
> Atentamente,
> Jaime Casanova
> Soporte y capacitación de PostgreSQL
> Guayaquil - Ecuador
> Cel. (593) 087171157
>