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
[email protected]
Colombia

--
TIP 7: no olvides aumentar la configuración del "free space map"

Responder a