Gabriel Ferro escribió:
Siguiendo un poco con el hilo de mi post anterior, para recordarles tengo una 
funcion que recorre una tabla de personas y le agrega ceros a la izquierda a 
todos los numdoc.
Creo que la gran demora de esto (lleva casi 72Hs) es porque tengo un indice sobre el campo (numdoc) que estoy actualizando y como los los registros se insertaron secuencialmente desde archivos planos ordenados por nombres (y sin haber existido en ese momento el indice de numdoc)...por ende el UPDATE me hace registro por registro pero ordenados por numdoc y ahi es que demora tanto.... no se si mi cabeza anda mal ya que tengo 38 pirulitos pero creo recordar que (en cobol me parece) cuando se hacia una operacion SQL se podia indicar que indice usar, se puede hacer en postgres esto? en este caso especial indicarle a posgres que no use indices sino que realice un barrido secuencial, sin tener que borrar y luego recrear los indices?


Hola Grabriel,

En la funcion que enviabas en el post anterior veo que lo unico que haces es completar un campo con ceros, lo cual no veo porque no lo haces directamente con una sentencia UPDATE:

(Ojo sin probar)

update
        padrones.personas
set
        numdoc = repeat('0', 12-length(numdoc)) || numdoc
where
        length(numdoc) < 12

Esto deberia ser mucho mas rápido y eficiente que la funcion.


Sobre el proceso que lleva 72 horas parece que demasiado tiempo. Yo miraria a ver si esta siendo bloqueado por algún otro, no recuerdo si esto se veia consultando la tabla pg_locks, o habia alguna funcion especifica para ello.

Saludos,

--
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************
PD:
Antes de imprimir este mensaje, asegúrese de que es necesario.
El medio ambiente está en nuestra mano.
--
TIP 9: visita nuestro canal de IRC #postgresql-es en irc.freenode.net

Responder a