Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group