Thread: wrong inicializied array in plpgsql

wrong inicializied array in plpgsql

From
Pavel Stehule
Date:
Hello

I am testing long array values. I tryed write simple function in plpgsql
for this. I found maybe a bug. Array in plpgsql without explicit init
(empty array) don't work;

CREATE OR REPLACE FUNCTION foo1() RETURNS FLOAT AS '
DECLARE f FLOAT [];
BEGIN
  f[1] := 10.0;
  RETURN f[1];
END' LANGUAGE plpgsql;

cyril=> select foo1();
 foo1
------


(1 row)

CREATE OR REPLACE FUNCTION foo2() RETURNS FLOAT AS '
DECLARE f FLOAT [] DEFAULT ''{}'';
BEGIN
  f[1] := 10.0;
  RETURN f[1];
END' LANGUAGE plpgsql;

cyril=> select foo2();
 foo2
------
   10
(1 row)


regards
Pavel Stehule

Re: wrong inicializied array in plpgsql

From
Tom Lane
Date:
Pavel Stehule <stehule@kix.fsv.cvut.cz> writes:
> I am testing long array values. I tryed write simple function in plpgsql
> for this. I found maybe a bug. Array in plpgsql without explicit init
> (empty array) don't work;

This isn't a bug; or at least, it's not plpgsql's fault.  The array
variable is initially NULL, same as any other plpgsql variable you
didn't explicitly initialize.  And assigning to an element of a NULL
array yields another NULL array.

Perhaps that behavior should be changed, but I think it would require
making unsupported assumptions about what the user wants...

            regards, tom lane