Thread: Arrays in pl/pgsql functions
PostgreSQL version 7.3.3 With reference to pl/pgsql functions. I can declare a function to return an array type and I get no complaints when defining or executing it. I can declare a variable within the function as an array type and I don't get any complaints defining or executing the function. When I try to access the array I have problems. I cannot find any documentation on accessing array types so I assumed they would follow the pgSQL notation of for example: CREATE OR REPLACE FUNCTION test_arrays() RETURNS int4[] AS ' DECLARE test int4[]; BEGIN test[1] := 1; RETURN test; END ' LANGUAGE 'plpgsql'; If I try to execute this function I get: WARNING: plpgsql: ERROR during compile of test_arrays near line 5 ERROR: syntax error at or near "[" If I comment out the line: test[1] := 1; then the function executes ok. Could someone be please inform me what the correct syntax for accessing arrays is or tell me if its not possible with pl/pgSQL functions. Thanks in advance, Donald Fraser.
Donald Fraser wrote: > Could someone be please inform me what the correct syntax for accessing arrays > is or tell me if its not possible with pl/pgSQL functions. > It won't work in 7.3.x or before, as you've noted. In 7.4 this will work: CREATE OR REPLACE FUNCTION test_arrays() RETURNS int4[] AS ' DECLARE test int4[] := ''{}''; BEGIN test[1] := 1; RETURN test; END ' LANGUAGE 'plpgsql'; regression=# select test_arrays(); test_arrays ------------- {1} (1 row) Note that you have to initialize "test" to an empty array, because otherwise you are trying to add an element to a NULL::int4[], the result of which is still NULL. Joe
Many thanks for clearing that one up. I have avoided using arrays for the mean time and gone for the more elegant solution of using an additional table. More flexible and powerful but, in the simple case that I needed, meant more work... Roll on 7.4 ! Regards Donald Fraser. ----- Original Message ----- From: "Joe Conway" <mail@joeconway.com> To: "Donald Fraser" <demolish@cwgsy.net> Cc: "[ADMIN]" <pgsql-admin@postgresql.org> Sent: Thursday, July 17, 2003 6:50 PM Subject: Re: [ADMIN] Arrays in pl/pgsql functions > Donald Fraser wrote: > > Could someone be please inform me what the correct syntax for accessing arrays > > is or tell me if its not possible with pl/pgSQL functions. > > > > It won't work in 7.3.x or before, as you've noted. In 7.4 this will work: > > CREATE OR REPLACE FUNCTION test_arrays() RETURNS int4[] AS ' > DECLARE > test int4[] := ''{}''; > BEGIN > test[1] := 1; > RETURN test; > END ' LANGUAGE 'plpgsql'; > > regression=# select test_arrays(); > test_arrays > ------------- > {1} > (1 row) > > Note that you have to initialize "test" to an empty array, because > otherwise you are trying to add an element to a NULL::int4[], the result > of which is still NULL. > > Joe > >
"Donald Fraser" <demolish@cwgsy.net> writes: > CREATE OR REPLACE FUNCTION test_arrays() RETURNS int4[] AS ' > DECLARE > test int4[]; > BEGIN > test[1] := 1; > RETURN test; > END ' LANGUAGE 'plpgsql'; > If I try to execute this function I get: > WARNING: plpgsql: ERROR during compile of test_arrays near line 5 > ERROR: syntax error at or near "[" Existing releases of plpgsql don't support assignment to array elements. I believe Joe Conway has fixed this for 7.4, though. regards, tom lane