Si se puede usa la USING para que cambie los datos de varchar a bigint *-------------------------------------------------------* *-Edwin Quijada *-Developer DataBase *-JQ Microsistemas
*-Soporte PostgreSQL *-www.jqmicrosistemas.com *-809-849-8087 *-------------------------------------------------------* > Date: Thu, 22 Sep 2011 10:03:25 -0400 > From: amp...@uci.cu > To: lisibeth.troco...@gmail.com > CC: pgsql-es-ayuda@postgresql.org > Subject: Re: [pgsql-es-ayuda] Consulta sobre modificación de tipo en un campo > > La otra opción que se me ocurre es que le añadas a tu tabla una columna > temporal de tipo BIGINT y programes una función que te inserte en esa columna > el valor de la columna a la que quieres hacerle el ALTER, tendrías que hacer > un typecast para convertir el VARCHAR a BIGINT. Posteriormente solo te > quedaría borrar la columna VARCHAR y renombrar la temporal para que quede > como deseas. > > Saludos > > ----- Mensaje original ----- > De: "Lisibeth Troconis" <lisibeth.troco...@gmail.com> > Para: "Adrian Misael Peña Montero" <amp...@uci.cu> > CC: "postgreSQL" <pgsql-es-ayuda@postgresql.org> > Enviados: Jueves, 22 de Septiembre 2011 9:25:20 GMT -04:30 Caracas > Asunto: Re: [pgsql-es-ayuda] Consulta sobre modificación de tipo en un campo > > en la segunda no es posible esa base de datos esta en producción, el campo > que estoy adicionando no, y allí si tengo libertad de hacerlo, es muy muy > seguro que no puedo hacer el cambio???? > > > El 22 de septiembre de 2011 09:22, Adrian Misael Peña Montero < amp...@uci.cu > > escribió: > > > El ALTER no lo puede hacer de VARCHAR a BIGINT, pero de BIGINT a VARCHAR sí, > valora el costo de realizar el ALTER en la segunda tabla que mencionas. > > Saludos > > ----- Mensaje original ----- > De: "Lisibeth Troconis" < lisibeth.troco...@gmail.com > > Para: "postgreSQL" < pgsql-es-ayuda@postgresql.org > > Enviados: Jueves, 22 de Septiembre 2011 9:16:04 GMT -04:30 Caracas > Asunto: [pgsql-es-ayuda] Consulta sobre modificación de tipo en un campo > > > > > Saludos! > > > Necesito por favor saber si puedo cambiar un tipo de dato character > varchar(50) a bigint sin perder los datos que tengo > > > > > ALTER TABLE mensajes ALTER COLUMN prefijo TYPE bigint > > > > > Poniéndolos en contexto tengo una tabla mensaje que guarda un número > telefónico formato internacional ejemplo 58261xxxxxxx , por razones que > siempre pasa al momento de diseñar la base de datos no se pensó que en algún > momento se quisiera realizar la consulta sobre esta tabla, sobre el prefijo, > osea no interesa el número completo, realizar esta consulta sobre la tabla > resulta muy costosa, pues posee demasiados registros, la opción que pensamos > fue crear un campo adicional y realizar el siguiente query > > > update mensaje set prefijo= > (select num from Prefijo where mensaje.dest like num || '%' limit 1) > where mensaje.id in ( > select m.id from mensaje m where m.refproveedor is not null and m.prefijo is > null > limit 5000 > ) > > > se realizo el cambio en un script por segmentos de 5000 mil registros cada > vez > > > pero pequeño detalle, al agregar la columna la agregamos como character > varchar(50) pues parecía lo lógico ya que en la tabla mensaje el numero se > almacena en un character varchar(255), pero resulta que tenemos otra tabla > donde se tienen los prefijos y en esta tabla el prefijo es un bitint > > > bueno el punto es que por los momentos quiero convertir este campo, para > luego hacer el indice y realizar comparaciones contra esta otra tabla sin > tener muchos líos > > > La pregunta en concreto es esa, como realizar el cambio sin perder los datos, > y cualquier otro aporte que me de luz al respecto de lo que deseo hacer > > > > > muchas gracias! espero respuestas =) > > > > > -- > Lisibeth Troconis > > > > > -- > Lisibeth Troconis > - > Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org) > Para cambiar tu suscripci�n: > http://www.postgresql.org/mailpref/pgsql-es-ayuda