Hi
I searching a reason why result of plpgsql_check's regress tests are different when its executed from regress tests or interactive.
This is simple test
drop table testtable;
create table testtable(a int, b int);
create or replace function test()
returns int as $$
declare r testtable;
begin
select * into r from testtable;
return r.a;
end;
$$ language plpgsql;
alter table testtable drop column b;
select * from plpgsql_check_function('test()');
this test should to return 0 rows, and it is working when I run it as test. But when I execute it in psql I got
┌───────────────────────────────────────────────────────────────────────┐
│ plpgsql_check_function │
╞═══════════════════════════════════════════════════════════════════════╡
│ warning:00000:4:SQL statement:too few attributes for target variables │
│ Detail: There are more target variables than output columns in query. │
│ Hint: Check target variables in SELECT INTO statement. │
└───────────────────────────────────────────────────────────────────────┘
(3 rows)
In interactive mode, the build_row_from_class has unrefreshed metadata. But why this behave I see only in psql and not in my regress tests?