Hi hackers,
I ran into a bug with plpgsql not invalidating its cache.
Experienced it on 15.5, but it reproduces on master.
It involves a function that references a custom type
which gets “replaced” by a new type with the same name.
Reconnecting makes the error go away.
Reproducible example:
create type test_t as (a int);
create table t1 (a test_t);
insert into t1 (values ('(1)'));
create or replace function test_f()
returns int
language plpgsql
as $function$
declare
t t1;
begin
select * into t from t1;
return (t.a).a;
end;
$function$
;
select test_f(); -- OK
-- create a new type and replace the old with the new one
create type test_t2 as (a int);
alter table t1 alter column a type test_t2 using a::text::test_t2;
drop type test_t;
alter type test_t2 rename to test_t;
select test_f(); -- ERROR
ERROR: XX000: cache lookup failed for type 16403
CONTEXT: PL/pgSQL function test_f() line 6 at RETURN
LOCATION: format_type_extended, format_type.c:137