Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

conversión global: double precision -> numeric (12,3)

Estas en el tema de conversión global: double precision -> numeric (12,3) en el foro de PostgreSQL en Foros del Web. La duda es si se puede hacer o existe un mecanismo para realizar una conversión general/global de un tipo de dato a otro (double precision ...
  #1 (permalink)  
Antiguo 18/04/2011, 11:24
Avatar de FiruzzZ  
Fecha de Ingreso: diciembre-2007
Ubicación: en casa
Mensajes: 470
Antigüedad: 16 años, 4 meses
Puntos: 41
Pregunta conversión global: double precision -> numeric (12,3)

La duda es si se puede hacer o existe un mecanismo para realizar una conversión general/global de un tipo de dato a otro (double precision a numeric) en una DB específica.
Resulta ser que los double precision son muy inexactos y no sirven para mi propósito, y el cambio involucra mas de 30 tablas (promedio entre 1-3 campos del susodicho tipo en cada tabla) que hay que cambiar.

Mi fuerte no es el pl/pgsql o el manejo de metadata de postgreSQL (por las dudas, de que por ahí esté la solución)
__________________
BadProgrammerException!
  #2 (permalink)  
Antiguo 18/04/2011, 12:21
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: conversión global: double precision -> numeric (12,3)

Firuzzz

Algo se podría hacer con Plpgsql pero no es tan facil como parece.

Lo que yo trataría de hacer, es una función que tome la información de mis tablas (Puede ser con information_schema.tables o information_schema.columns), con un cursor preguntar si el tipo de dato es double precision y si es el caso hacer un EXECUTE de un alter table sobre la tabla actual del cursor, crear un campo adicional de tipo numeric, vaciar el campo de double precision al numeric y borrar la columna.

Después de todo esto aplicar un vaccum para que no queden tuplas innecesarias y dispersas en memoria.

Cita:
Resulta ser que los double precision son muy inexactos y no sirven para mi propósito
Tienes razón. En un pasado tuve el mismo problema y casi no doy con la explicación.


EDITO: También podrías hacerlo así:
Código SQL:
Ver original
  1. pruebas=> CREATE TABLE numeros(num DOUBLE PRECISION);
  2. CREATE TABLE
  3. pruebas=> \d numeros
  4.         Tabla ½public.numeros╗
  5.  Columna |       Tipo       | Modificadores
  6. ---------+------------------+---------------
  7.  num     | DOUBLE PRECISION |
  8.  
  9.  
  10. pruebas=> ALTER TABLE numeros ALTER COLUMN num TYPE NUMERIC;
  11. ALTER TABLE
  12. pruebas=> \d numeros
  13.    Tabla ½public.numeros╗
  14.  Columna |  Tipo   | Modificadores
  15. ---------+---------+---------------
  16.  num     | NUMERIC |


Si te creas 90 lineas de esta sentencia con la información de tus tablas, te tomará no mas de 1 hora.

Mientras piensas en el procedimiento, lo podrías hacer directamente. Igual no es una tarea que requieras constantemente en tu BD

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Última edición por huesos52; 18/04/2011 a las 12:28
  #3 (permalink)  
Antiguo 18/04/2011, 15:11
Avatar de FiruzzZ  
Fecha de Ingreso: diciembre-2007
Ubicación: en casa
Mensajes: 470
Antigüedad: 16 años, 4 meses
Puntos: 41
Respuesta: conversión global: double precision -> numeric (12,3)

gracias por las alternativas..
a ver si llego a dar con alguna interesante solución, y no las decenas de ALTER COLUMN
__________________
BadProgrammerException!

Etiquetas: double, global, numeric, precision
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 21:00.