On 24 Oct 2010, at 15:41, Reuven M. Lerner wrote:

> I've managed to improve things quite a bit by using cursors, but I've been 
> stumped in trying to find a replacement for the COUNT(*).  I wrote a function 
> that works great on 9.0:
> 
> CREATE OR REPLACE FUNCTION count_the_rows() RETURNS INTEGER AS $$
> DECLARE
>    mycursor CURSOR FOR SELECT * FROM test_table;
>    number_of_rows integer := 0;
> BEGIN
>    OPEN mycursor;
>    MOVE ALL IN mycursor;
>    GET DIAGNOSTICS number_of_rows := ROW_COUNT;
>    RETURN number_of_rows;
> END;
> $$ LANGUAGE 'plpgsql';
> 
> Unfortunately, the project is using 8.3, and the function refuses to even 
> compile, due to the "MOVE ALL".  When we change it to something else (such as 
> MOVE 20000000, which returns the actual number of rows skipped to psql), or 
> ABSOLUTE -1, we get 0 back from ROW_COUNT.


I recall movable cursors weren't supported in pl/pgsql until 8.4.

You can use (movable) cursors in SQL though. That probably requires some 
client-side code, as things like GET DIAGNOSTICS aren't available in sql 
functions, but it may be of use to you. I've done this in a PHP web-application 
a couple of times.

Alban Hertroys

--
Screwing up is an excellent way to attach something to the ceiling.


!DSPAM:737,4cc531ef10289398819850!



-- 
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

Reply via email to