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? Regards Pavel