Thread: plpgsql and setting array values.

plpgsql and setting array values.

From
"Nicolai Petri"
Date:
Hi all

I'm writing a rrdtool replacement in pgsql and have a little problem with
plpgsql and arrays.

The problem is best shown in the following example :

--------------------------
CREATE OR REPLACE FUNCTION test1(integer[]) RETURNS float[] AS '
DECLARE
pa_dsid ALIAS FOR $1;
l_rv float[];
BEGIN
FOR aoffset IN 2 .. pa_dsid[1]+1 LOOP
-- XXX: The following is not possible..
l_rv[aoffset]:=pa_dsid[aoffset]*4; -- Return dummyvalue (multiply by 4)
END LOOP;
RETURN l_rv;
END;
' language 'plpgsql';
--------------------------

The problem is that i cannot assign values to explicit array values like
myarray[2]:=123;
The only way is to say myarray:=' {12,123}'; and that is not very flexible
because I will have to build up textstrings in my stored procedure.

Any comments on this ? Have I missed some documentation or similar ?

Best regards,
Nicolai Petri
catpipe Systems ApS


Re: plpgsql and setting array values.

From
Tom Lane
Date:
"Nicolai Petri" <lists@petri.cc> writes:
> The problem is that i cannot assign values to explicit array values like
> myarray[2]:=123;

Yeah, plpgsql doesn't support that (subscripting the assignment
destination).  It's been on the to-do list for awhile, but hasn't risen
to the top of anyone's queue I guess.  One thing that's not real clear
is what the semantics should be --- the equivalent cases at the SQL
level aren't super friendly, either.

            regards, tom lane