2010/1/12 Simeó Reig <[email protected]>: > ¿Hay algún método menos 'peligroso' para cambiar el orden de las columnas ? > > http://sw.cablop.net/tips/2009/08/29/como-cambiar-el-orden-de-las-columnas-en-postgresql/ >
wow!!! cuantas idioteces se encuentra uno en internet!!! nunca, repito, nunca hagas esto... la única razón por la que a el pareció funcionarle es que los tipos de datos eran los mismo en ambas columnas y aun así todo lo que logró es cambiarle el nombre a las columnas, pero si te fijas los valores no se movieron... es decir que los valores de "a" ahora están en "b" y viceversa y si los tipos de datos son diferentes el resultado es peor aun: """ test=# SELECT * FROM test; ERROR: could not open relation with OID 0 test=# alter table test alter a type int; ERROR: invalid memory alloc request size 18446744072475901956 """ > Creía que no se podía hacer ya que pgadmin no te da la opción, por lo que > creo que el método mostrado por el link igual no es del todo recomendable, > ¿que opinais? > > 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 catalogo solo lograra que intente leer en disco esa columna en la posicion que le dijimos (por eso el error que da, busca un campo text de 4+length(string) bytes y encuentra un campo int de 4 bytes, luego busca un campo int de 4 y encuentra el texto)... maneras "reales" de solucionar esto: 1) crea una tabla temporal con el orden de las columnas que necesitas; copia los datos con "insert into ... select ..."; borra la tabla vieja; renombra la tabla nueva (claro tuviste que haber borrado todos los constraints e indices antes y reconstruirlos luego) 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) 3) crea una vista con el orden que quieres 4) modifica postgres agregando un campo a pg_attributes para guardar la posicion fisica de la columna, y envia el parche a [email protected] -- Atentamente, Jaime Casanova Soporte y capacitación de PostgreSQL Asesoría y desarrollo de sistemas Guayaquil - Ecuador Cel. +59387171157 -- TIP 2: puedes desuscribirte de todas las listas simult�neamente (env�a "unregister TuDirecci�nDeCorreo" a [email protected])
