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