Hello
2009/10/31 Jeff Shanab <jshanab@earthlink.net>:
>
> The following bug has been logged online:
>
> Bug reference: =C2=A0 =C2=A0 =C2=A05154
> Logged by: =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Jeff Shanab
> Email address: =C2=A0 =C2=A0 =C2=A0jshanab@earthlink.net
> PostgreSQL version: 8.3.5
> Operating system: =C2=A0 Linux
> Description: =C2=A0 =C2=A0 =C2=A0 =C2=A0ERROR: =C2=A0cannot assign non-co=
mposite value to a row
> variable
> Details:
>
> As discussed on the irc. I had a problem with a utility function that was
> being passed a NEW row and a null for the OLD row. The error was created
> when it tries to store the row variable in the local variables. RhodiumTo=
ad
> on the list provided this simple test.
>
> create type foo1 as (a integer, b text);
> CREATE TYPE
> create type foo2 as (c integer, d foo1);
> CREATE TYPE
>
> create function foo() returns foo2 language plpgsql as $f$ declare v foo2;
> begin v :=3D null; return v; end; $f$;
> CREATE FUNCTION
>
This isn't bug - it is just feature. ROW value cannot contain scalar
value. If you would to like reset variable, use NULL row constant.
BEGIN
v :=3D (NULL, NULL);
-- it is equalent to NULL
RAISE NOTICE 'IS IT NULL %', v IS NULL;
RETURN NULL;
END;
Regards
Pavel Stehule
> select foo();
>
> ERROR: cannot assign non-composite value to a row variable
>
> CONTEXT: PL/pgSQL function "foo" line 1 at assignment
>
> --
> Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-bugs
>