Ver Mensaje Individual
  #2 (permalink)  
Antiguo 18/04/2011, 12:21
Avatar de huesos52
huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 1 mes
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