Este sería un ejemplo práctico de lo que quieres hacer: Cambiar el orden de las 
columnas:




-- Crear una tabla temporal 

CREATE LOCAL TEMPORARY TABLE "foo0bmfgd" (
  "id" INTEGER, 
  "nombre" VARCHAR(100), 
  "descripcion" VARCHAR(500), 
  "archivo_bytea" BYTEA, 
  "archivo_oid" OID, 
  "mime" VARCHAR(100), 
  "size" DOUBLE PRECISION
) WITH OIDS;

--Copiar los datos de a table original a la table temporal

INSERT INTO "foo0bmfgd" ("id", "nombre", "descripcion", "archivo_bytea", 
"archivo_oid", "mime", "size")
SELECT "id", "nombre", "descripcion", "archivo_bytea", "archivo_oid", "mime", 
"size" FROM "public"."foo";

-- Borrar la table original

DROP TABLE "public"."foo";

-- Crear la nueva table con el orden de las columnas que deseas

CREATE TABLE "public"."foo" (
  "id" SERIAL NOT NULL, 
  "nombre" VARCHAR(100), 
  "descripcion" VARCHAR(500), 
  "archivo_bytea" BYTEA, 
  "archivo_oid" OID, 
  "size" DOUBLE PRECISION, 
  "mime" VARCHAR(100), 
  CONSTRAINT "foo_pkey" PRIMARY KEY("id")
) WITHOUT OIDS;

SELECT setval('"public"."foo_id_seq"', 6, false);


-- Copiar los datos desde la table temporal ala table nueva

INSERT INTO "public"."foo" ("id", "nombre", "descripcion", "archivo_bytea", 
"archivo_oid", "size", "mime")
SELECT "id", "nombre", "descripcion", "archivo_bytea", "archivo_oid", "size", 
"mime" FROM "foo0bmfgd";





Espero te sirva

Mario Soto








-----Mensaje original-----
De: [email protected] 
[mailto:[email protected]] En nombre de Simeó Reig
Enviado el: miércoles, 13 de enero de 2010 6:29
Para: Jaime Casanova
CC: [email protected]
Asunto: Re: [pgsql-es-ayuda] Cambiar orden de las columnas


----- Original Message ----- 
>From: "Jaime Casanova" <jcasa...@xxxxxxxxxxxxx>
>wow!!! cuantas idioteces se encuentra uno en internet!!!
>nunca, repito, nunca hagas esto...

Suerte que uno con los años se vuelve precavido, y esto añadido al sentido 
comun de que si fuese viable ya lo habrían implantado los de pgadmin, me 
hizo dudar y preguntar antes de nada. Realmente internet es, como todo, una 
fuente de grandísimas cosas pero tambien de memeces impresionantes

>dificilmente el pgadmin decide lo que postgres puede y no puede hacer ;)
>el verdadero problema es que la posicion fisica de la columna en disco
>es la misma que la posicion logica, asi que hacer el cambio en ese

Seguro que es complicado, el motivo de cambiar de orden es simplemente pq 
cuando añades un campo nuevo al diseño me gusta que se mantenga un orden y 
me molesta un poquitín que se añada al final de la tabla. Es simplemente una 
cuestión de estética al hacer el diseño de la BD

>maneras "reales" de solucionar esto:
>1) crea una tabla temporal con el orden de las columnas que necesitas;
>2) usa pg_dump para hacer un respaldo de la base o quiza solo de la
>tabla y arregla el script a mano (incluidos los datos claro)

Si, ya los había sopesado

>3) crea una vista con el orden que quieres

Umm, en este caso no me sirve mucho

>4) modifica postgres agregando un campo a pg_attributes para guardar
>la posicion fisica de la columna, y envia el parche a
>[email protected]


Ya me gustaría ya tener el nivel necesario para hacerlo, se escapa de mis 
posibilidades :-)


Gracias Jaime por todo

Un saludo

Simeó Reig


--
TIP 1: para suscribirte y desuscribirte, visita 
http://archives.postgresql.org/pgsql-es-ayuda
 

__________ Información de ESET NOD32 Antivirus, versión de la base de firmas de 
virus 4766 (20100113) __________

ESET NOD32 Antivirus ha comprobado este mensaje.

http://www.eset.com
  

__________ Información de ESET NOD32 Antivirus, versión de la base de firmas de 
virus 4767 (20100113) __________

ESET NOD32 Antivirus ha comprobado este mensaje.

http://www.eset.com
  

__________ Información de ESET NOD32 Antivirus, versión de la base de firmas de 
virus 4772 (20100114) __________

ESET NOD32 Antivirus ha comprobado este mensaje.

http://www.eset.com
 
 

__________ Información de ESET NOD32 Antivirus, versión de la base de firmas de 
virus 4772 (20100114) __________

ESET NOD32 Antivirus ha comprobado este mensaje.

http://www.eset.com
 

--
TIP 8: explain analyze es tu amigo

Responder a