Re: forzar cambiar tipo de dato en una columna

From: Juan Romero <jgromero(at)gmail(dot)com>
To: "Roberto A(dot)" <gedeon56(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: forzar cambiar tipo de dato en una columna
Date: 2010-03-29 23:39:06
Message-ID: 32B279B6-5358-45CA-A4E9-656C7134526A@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


On Mar 29, 2010, at 5:36 PM, Roberto A. wrote:

> Mi nombre es Roberto Almanza
> Hola como estan gente de la comunidad
>
> Espero encarecidamente que ustedes puedan ayudame con el problema
> que tengo. Sucede que tengo una base de datos donde por motivos de
> fuerza mayor tengo que cambiar el tipo de dato de una columna en una
> tabla que a su vez es llave foranea de otra.
> e estado buscando en la net y no eh encontrado un respuesta clara.
> E intentado cambiarlo con el la siguiente linea
>
> el tipo de dato original de la columna ci es int pero quiero
> cambiarlo por varchar(25)
>
> alter table integrantes alter column ci type varchar(25);
>
> pero me da el siguiente mensaje de error
>
> ERROR: foreign key constraint "proyecto_ci_fkey" cannot be
> implemented
> DETAIL: Key columns "ci" and "ci" are of incompatible types:
> character varying and integer.
>
>
> Existe alguna forma de modificar esta columna si perder la
> informacion que ya existe
> tal ves forzandola el alter table column type ?
>

Como ya te imaginarás, lo que sucede es que tu columna de tipo entero
no puede hacer un cast implícito a varchar(25). Según el manual
podrías utilizar la cláusula USING... pero como a mi no me funcionó
(quizás hice algo mal, por eso: [1]) opté, por lo otro que dice el
manual: borrar constraints, modificar el tipo, y volver a crear los
constraints. Algo como:

pruebas=# ALTER TABLE integrantes DROP CONSTRAINT proyecto_ci_fkey;
ALTER TABLE
pruebas=# ALTER TABLE proyecto ALTER COLUMN id TYPE varchar(25);
ALTER TABLE
pruebas=# ALTER TABLE integrantes ALTER COLUMN ci TYPE varchar(25);
ALTER TABLE
pruebas=# ALTER TABLE integrantes ADD CONSTRAINT proyecto_ci_fkey
FOREIGN KEY (ci) REFERENCES integrantes;
ALTER TABLE

[1] http://www.postgresql.org/docs/8.4/interactive/ddl-alter.html#AEN2593

Juan Gabriel Romero
jgromero(at)gmail(dot)com
Colombia

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2010-03-30 00:46:04 Re: forzar cambiar tipo de dato en una columna
Previous Message Roberto A. 2010-03-29 22:36:55 forzar cambiar tipo de dato en una columna