Lo que podes hacer es ejecutar la consulta por partes (con limits) y ahacer cursores para cada consulta. Es mas laborioso pero ocuparias menos memoria.
El día 17 de octubre de 2008 9:27, Silvio Quadri <[EMAIL PROTECTED]> escribió: > > > El 17 de octubre de 2008 4:32, Rafael Comino Mateos <[EMAIL PROTECTED]> > escribió: >> >> Tengo una función que al ejecutarse debe trabajar con un conjunto de >> 1.000.000 de registros aproximadamente. >> >> Sobre ese conjunto de datos, en un cursor saco una a una las filas y la >> mayoría las borro y otras pues las guardo en una tabla, o hago cálculos, >> etc. >> >> El problema que tengo es de eficiencia, ya que la transacción se hace tan >> grande que ocupa demasiada memoria y se hace lentísimo la ejecución. >> >> Que puedo hacer? > > ¿Es necesario que ejecutes todo en una transacción? > ¿Es necesario también tener un cursor? > Yo he ejecutado cosas similares con plpgsql y no tuve inconvenientes ... > > Después de ejecutar muchos "delete"s sobre la tabla ¿Hacés el vacuum? > Quizás ejecuciones anteriores que no efectuaron el vacuum correspondiente > estén afectando la performance. > > Saludos! > Silvio > > > > -- TIP 1: para suscribirte y desuscribirte, visita http://archives.postgresql.org/pgsql-es-ayuda