Re: BUG #5154: ERROR: cannot assign non-composite value to a row variable
От | Andrew Gierth |
---|---|
Тема | Re: BUG #5154: ERROR: cannot assign non-composite value to a row variable |
Дата | |
Msg-id | 87tyxfj8ll.fsf@news-spur.riddles.org.uk обсуждение исходный текст |
Ответ на | Re: BUG #5154: ERROR: cannot assign non-composite value to a row variable (Pavel Stehule <pavel.stehule@gmail.com>) |
Ответы |
Re: BUG #5154: ERROR: cannot assign non-composite value to a
row variable
|
Список | pgsql-bugs |
>>>>> "Pavel" == Pavel Stehule <pavel.stehule@gmail.com> writes: >> 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. RhodiumToad 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 := null; return v; end; $f$; >> CREATE FUNCTION Pavel> This isn't bug - it is just feature. No, it's a bug. Here's a clearer testcase: create type foo1 as (a integer, b text); create type foo2 as (c integer, d foo1); create or replace function foo1() returns foo1 language plpgsql as $f$ declare v foo1; begin v := null::foo1; return v; end; $f$; create or replace function foo2() returns foo2 language plpgsql as $f$ declare v foo2; begin v := null::foo2; return v; end; $f$; select foo1(); foo1 ------ (,) (1 row) select foo2(); ERROR: cannot assign non-composite value to a row variable CONTEXT: PL/pgSQL function "foo2" line 1 at assignment Alternatively: create or replace function foo1(r foo1) returns foo1 language plpgsql as $f$ declare v foo1; begin v := r; return v; end; $f$; create or replace function foo2(r foo2) returns foo2 language plpgsql as $f$ declare v foo2; begin v := r; return v; end; $f$; select foo1(null); foo1 ------ (,) (1 row) select foo2(null); ERROR: cannot assign non-composite value to a row variable CONTEXT: PL/pgSQL function "foo2" while storing call arguments into local variables These calls should either both work or both fail. -- Andrew (irc:RhodiumToad)
В списке pgsql-bugs по дате отправления: