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"