Re: How to get the total number of rows returned by query when using a cursor?

From: "Egor Shipovalov" <pgsql_list(at)eonline(dot)ru>
To: "Tom Lane" <tgl(at)sss(dot)pgh(dot)pa(dot)us>, "Egor Shipovalov" <pgsql_list(at)eonline(dot)ru>
Cc: "Pgsql-General" <pgsql-general(at)postgresql(dot)org>
Subject: Re: How to get the total number of rows returned by query when using a cursor?
Date: 2003-09-23 15:38:37
Message-ID: AKEFIKCGEAEFBICLBFBMGEJECIAA.pgsql_list@eonline.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

> > I'm implementing paging through search results using cursors. Is there a
> > better way to know total number of rows under a cursor than running a
> > separate COUNT(*) query? I think PostgreSQL is bound to know this number
> > after the first FETCH, isn't it?
>
> Why would you think that? In general Postgres doesn't know the number
> of rows until it reaches the end of the query.

Sorry, I thought that because my query was sorted. For unsorted queries,
yes, there's usually no way to know until you reach the end.

> > On a side note, why queries using LIMIT are SO terribly slow,
> compared to
> > cursors and sometimes even ones without LIMIT?
>
> Generally they're not particularly slow. Perhaps you should show us the
> EXPLAIN ANALYZE results for your problem case.

I did just that, but the plan was too complicated for me to comprehend ;)
The interesting thing is that some queries are tens (!) of times slower with
LIMIT that without. These contain a number of joins on subselects. If you're
interested, I'll post examples.

Best regards,
Egor Shipovalov.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2003-09-23 15:42:58 Re: How to get the total number of rows returned by query when using a cursor?
Previous Message Vivek Khera 2003-09-23 15:32:38 Re: State of Beta 2