BUG #18131: PL/pgSQL: regclass procedure parameter wrongly memoized(?)
The Post Office <noreply@postgresql.org>
From: PG Bug reporting form <noreply@postgresql.org>
To: pgsql-bugs@lists.postgresql.org
Cc: cstork+postgresql@gmail.com
Date: 2023-09-22T19:22:34Z
Lists: pgsql-bugs
The following bug has been logged on the website:
Bug reference: 18131
Logged by: Christian Stork
Email address: cstork+postgresql@gmail.com
PostgreSQL version: 14.9
Operating system: Ubuntu 22.04
Description:
The following condensed recipe reproduces the error:
create procedure callee(t regclass)
language plpgsql as
$body$
begin
raise notice 'callee: oid = %', t::oid;
execute 'table ' || t;
end;
$body$;
create procedure caller()
language plpgsql as
$body$
begin
create table table_name ();
raise notice 'caller: oid = %', 'table_name'::regclass::oid;
call callee('table_name');
drop table table_name;
end;
$body$;
call caller(); -- OK
call caller(); -- ERROR: callee executed with OID of previous invocation!
-- Relevant output (Ubuntu 14.9-1.pgdg22.04+1):
-- ...
-- NOTICE: caller: oid = 24769724
-- NOTICE: callee: oid = 24769724
-- CALL <---- first statement completed
successfully
-- NOTICE: caller: oid = 24769727
-- NOTICE: callee: oid = 24769724 <---- should be the same as line
above
-- ERROR: syntax error at or near "24769724"
-- LINE 1: table 24769724 <---- no more table with this OID in
pg_catalog, hence OID instead of table name, I assume
-- ...
Commits
-
Collect dependency information for parsed CallStmts.
- dc8d72c1c213 17.0 landed
- 055f786ea6a8 16.1 landed
- fdc7cf73b424 11.22 landed
- 8cfc3e80b612 13.13 landed
- 5cff431bc9b8 14.10 landed
- 4435a8d5dbab 12.17 landed
- 0e59266a5daf 15.5 landed