We recently upgraded from postgres version 8.2.7 to 8.3.7. The below pl/pgsql test function behaves differently in the 2 versions.
 
The code of the function is :-
 
CREATE OR REPLACE FUNCTION "public"."testloop" () RETURNS varchar AS
$body$
BEGIN
    FOR idx IN 1..10 LOOP
        raise notice 'idx=%', idx;
        idx:=idx+1;  
    END LOOP;
    return '';
END;
$body$
LANGUAGE 'plpgsql'
 
The sql :-
 
select testloop();
 
in 8.2.7 returns:-
 
NOTICE:  idx=1
NOTICE:  idx=3
NOTICE:  idx=5
NOTICE:  idx=7
NOTICE:  idx=9
 
But in 8.3.7 returns:-
 
NOTICE:  idx=1
NOTICE:  idx=2
NOTICE:  idx=3
NOTICE:  idx=4
NOTICE:  idx=5
NOTICE:  idx=6
NOTICE:  idx=7
NOTICE:  idx=8
NOTICE:  idx=9
NOTICE:  idx=10
 
So in 8.3.7, the incrementing of the for-loop variable “idx” is being ignored; that is not the case in 8.2.7. Is this a new feature of 8.3.7 or a bug?
 
Since a lot of our functions depend on manual altering of for-loop variables, any prompt help/advise/suggestions would be greatly appreciated!
 
Thanks!
atul
