Обсуждение: Variable not found in subplan target lists, PostgreSQL 8.1 beta3
Hi, I have a query that throws error "Variable not found in subplan target lists". This should allow it to be reproduce. create temporary table table1 ( col1 integer not null, col2 integer not null ); create temporary table table2 (); create or replace function udftable1row(integer, integer) returns table1 AS $$ select $1, $2; $$ language sql immutable; create or replace function udf(table1) returns void as $$ $$ language sql immutable; -- This throws "Variable not found in subplan target lists" select udf(t1) from udftable1Row(1,2) t1 cross join table2; -- Now that we have Row constructor, I can get rid of my function udftable1row() and this works ok select udf(t1) from (select (cast(row(1,2) as table1)).*) t1 cross join table2; I am on PostgreSQL 8.1 beta3 under Windows XP Service Pack 2. Thanks, Jean-Pierre Pelletier e-djuster
"Jean-Pierre Pelletier" <pelletier_32@sympatico.ca> writes: > I have a query that throws error "Variable not found in subplan target > lists". > This should allow it to be reproduce. This seems to be fixed already in beta4. But thanks for the report! Relevant fix is: 2005-10-19 13:31 tgl * src/backend/optimizer/plan/createplan.c: Fix oversight in recent changes to enable the 'physical tlist' optimization for subquery and function scan nodes: we can't just do it unconditionally, we still have to check whether there is any need for a whole-row Var. I had been thinking that these node types couldn't have any system columns, which is true, but that loop is also checking for attno zero, ie, whole-row Var. Fix comment to not be so misleading. Per test case from Richard Huxton. regards, tom lane