Re: [Pgsql-ayuda] Cambio de tipo char a varchar

From: Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl>
To: "Alfonso Andaur L(dot)" <postgresql(at)creasoluciones(dot)cl>
Cc: pgsql-ayuda(at)tlali(dot)iztacala(dot)unam(dot)mx
Subject: Re: [Pgsql-ayuda] Cambio de tipo char a varchar
Date: 2003-08-05 01:06:50
Message-ID: 20030805010650.GC3560@dcc.uchile.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Mon, Aug 04, 2003 at 04:28:25PM -0400, Alfonso Andaur L. wrote:
> > Buenas ante todo quisiera saber si existe alguna manera de cambiar un
> > tipo de un campo, es decir, tengi un campo codigo que esta declarado
> > como char pero lo que deseo es que este sea varchar.

> 2. cambiando en nombre de tu campo a cualquier cosa (por ejemplo "basura") y
> luego crear el campo nuevamente pero según la definición correcta.

O botando el campo... (sólo en 7.3):
ALTER TABLE tabla DROP COLUMN columna-antigua

(pero naturalmente antes de eso se debe crear la nueva columna y copiar
los datos de una a otra).

En realidad hay otro mecanismo, más peligroso pero más sencillo:

alvh=# CREATE TABLE test (a char(25));
CREATE TABLE
alvh=# \d test
Table "public.test"
Column | Type | Modifiers
--------+---------------+-----------
a | character(25) |

alvh=# BEGIN;
BEGIN
alvh=# UPDATE pg_attribute SET atttypid='varchar'::regtype
WHERE attrelid='test'::regclass AND attname='a';
UPDATE 1
alvh=# \d test
Table "public.test"
Column | Type | Modifiers
--------+-----------------------+-----------
a | character varying(25) |

alvh=# UPDATE test SET a=a;
UPDATE
alvh=# SELECT a FROM test; -- verificar que los datos
-- estan OK
alvh=# COMMIT;
COMMIT
alvh=# VACUUM FULL test;
VACUUM

Hay que ser cuidadoso con no hacer estas cosas fuera de una transacción,
y no hacer COMMIT hasta no estar bien seguro de que el resultado es
correcto!! (i.e. si pierdes datos la culpa es tuya).

Mucho ojo, esto solo funciona con algunos tipos de datos, es decir no
trates de pasar una columna INTEGER a TEXT ni cosas similares.

--
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
"Cuando mañana llegue pelearemos segun lo que mañana exija" (Mowgli)

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message AECT Listas 2003-08-05 01:24:55 [Pgsql-ayuda] Consulta
Previous Message Patricio Muñoz 2003-08-04 21:56:47 Re: [Pgsql-ayuda] Cambio de tipo char a varchar