Re: regular la carga de registros en una consulta.

From: Yadira Lizama Mue <ylizama(at)uci(dot)cu>
To: Emanuel Calvo Franco <postgres(dot)arg(at)gmail(dot)com>
Cc: Foro Postgres <pgsql-es-ayuda(at)postgresql(dot)org>, Manuel Diego <manuel(at)radiohead(dot)cl>
Subject: Re: regular la carga de registros en una consulta.
Date: 2009-11-21 12:49:38
Message-ID: 1353391921.671511258807778691.JavaMail.root@ucimail3.uci.cu
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Gracias, muy oportuna tu aclaración, estaba usando la solución del order by por otras razones pero no sabía la implicación del synchronize_seqscans,
Saludos


Yadira Lizama Mué
Universidad de las Ciencias Informáticas

----- Mensaje original -----
De: "Emanuel Calvo Franco" <postgres(dot)arg(at)gmail(dot)com>
Para: "Manuel Diego" <manuel(at)radiohead(dot)cl>
CC: "Yadira Lizama Mue" <ylizama(at)uci(dot)cu>, "Foro Postgres" <pgsql-es-ayuda(at)postgresql(dot)org>
Enviados: Sábado, 21 de Noviembre 2009 0:42:35 (GMT-0500) Auto-Detected
Asunto: Re: [pgsql-es-ayuda] regular la carga de registros en una consulta.

El día 20 de noviembre de 2009 07:32, Manuel Diego
<manuel(at)radiohead(dot)cl> escribió:
> Lo que deseas hacer es algo asi como una "paginación". Eso lo consigues
> agregando el OFFSET a tu consulta es decir:
> SELECT * FROM tabla LIMIT 100 OFFSET 0;
> Despues
> SELECT * FROM tabla LIMIT 100 OFFSET 100;
> Y asi:
> SELECT * FROM tabla LIMIT 100 OFFSET 200;
> El 20-11-2009, a las 0:12, Yadira Lizama Mue escribió:
>

Guarda con esto!

Recuerden que el synchronize_seqscan esta activado, por lo que si la
tabla es grande, a partir
de una cierta cantidad de registros esto devuelve no siempre los mismos valores.

CREATE TABLE muchos AS
SELECT i as entero,
random() as flotante
FROM generate_series(1,1000000) i(i);

SELECT * FROM muchos LIMIT 5 OFFSET 5000;
7961;0.165913014207035
7962;0.121883166953921
7963;0.16617708094418
7964;0.157062129117548
7965;0.104852370452136

SELECT * FROM muchos LIMIT 5 OFFSET 5000;
10921;0.214016762096435
10922;0.193961652927101
10923;0.321718231309205
10924;0.975195468403399
10925;0.748051355592906

Para que esto funcione como queres, tenés que hacer algo así (NO RECOMENDABLE):

SET synchronize_seqscans = off;
SELECT * FROM muchos LIMIT 5 OFFSET 5000;
5001;0.900254020001739
5002;0.546161777339876
5003;0.657537387683988
5004;0.729369143024087
5005;0.755969829391688

La otra manera es utilizando un ORDER BY para ordenar por la columna principal

--
Emanuel Calvo Franco
DBA at: www.siu.edu.ar
www.emanuelcalvofranco.com.ar

--

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Emanuel Calvo Franco 2009-11-21 15:24:47 Re: PgDay Marzo-2010 Republica Dominicana
Previous Message Jose Luis Balle 2009-11-21 11:47:55 Re: [pgsql-es-ayuda] RE: [pgsql-es-ayuda] RE: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Consulta diseño base de datos