Re: regular la carga de registros en una consulta.

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Yadira Lizama Mue <ylizama(at)uci(dot)cu>
Cc: Foro Postgres <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: regular la carga de registros en una consulta.
Date: 2009-12-03 00:29:48
Message-ID: 20091203002948.GI6276@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Yadira Lizama Mue escribió:
> Hola a todos,
> me gustaría que me ayudaran con el siguiente problema: Necesito hacer
> una consulta SELECT pero recorrer sus registros de forma iterativa, es
> decir que no me devuelva todos los registros de un golpe sino una
> porción de ellos, y ejecutar la consulta varias veces hasta que haya
> recorrido todo el resultado de la misma.
>
> El problema es que trato de preveer que cuando realice la consulta
> esta me devuelva gran cantidad de registros y mi aplicación consuma
> mucha memoria de un golpe.

No es necesariamente buena idea usar LIMIT / OFFSET para paginación,
porque cada vez que la ejecutas tienen que leerse todos los registros
que ya te saltaste en las "páginas" anteriores. Una alternativa es
declarar un cursor y hacerle FETCH repetidamente:

DECLARE micursor CURSOR FOR SELECT ... FROM ...;

a continuación puedes darle
FETCH 100 FROM micursor
y te retornará los 100 registros. Los FETCH debes hacerlo dentro de una
misma transacción (a menos que especifiques WITH HOLD en el DECLARE,
pero eso hará que el cursor se ejecute completo al momento de hacer
COMMIT).

Ten en cuenta que este mecanismo requiere mantener una transacción
abierta por largo tiempo lo cual tampoco es necesariamente muy buena
idea. Todo depende de qué quieres hacer con los registros retornados.
Si tienes que esperar a que el usuario haga click en cada página antes
de mostrar la siguiente, no deberías usar esto.

--
Alvaro Herrera Vendo parcela en Valdivia: http://rie.cl/?a=255568
"La conclusión que podemos sacar de esos estudios es que
no podemos sacar ninguna conclusión de ellos" (Tanenbaum)

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Diego Schulz 2009-12-03 01:19:23 Re: PostgreSQL vs CMS
Previous Message Lennin Caro 2009-12-03 00:07:18 Re: [OT] Comunidad Venezolana y Cubana y Latina Pgday 2010 Venezuela