Re: Counting records in a PL/pgsql cursor

Magnus Hagander <mha@sollentuna.net>

From: "Magnus Hagander" <mha@sollentuna.net>
To: "Richard Troy" <rtroy@ScienceTools.com>, "Merlin Moncure" <mmoncure@gmail.com>
Cc: "Martijn van Oosterhout" <kleptog@svana.org>, <pgsql-general@postgresql.org>
Date: 2006-11-03T14:33:27Z
Lists: pgsql-general
> > > I can deal with materializing the resultset, but I want 
> to get away 
> > > from the loop-a-thousand-times-doing-plus-one...
> >
> > i dont think its possible.  note that you can make a 
> refcursor inside 
> > your plpgsql function and pass it to an sql function which 
> can do sql 
> > cursor operations on it -- i think :-)..haven't tried it yet.
> >
> > merlin
> 
> ...If you know your application well enough, you might get 
> away with doing a select count() with the same where clause 
> just before entering the cursor. It _could_ of course be 
> wrong, though! OTOH, it would be much faster. If the only 
> down-side is occasionally giving users an incorrect count, 
> then perhaps call it a "row estimate", and let them marvel at 
> how accurate the estimate is most of hte time!

Nope, the query is way too expensive to run it twice. (GIN scan over
well over half a million rows. It's faster to do the
get-as-cursor-then-loop-and-increment, I've measured that)

//Magnus