> Hm. I can reproduce this if I start in a virgin database, but not
> otherwise.
for a database with a history of temporary namespaces we just need more
parallel prepared transactions
> There's no reason this would be special to functions.
temp functions are allowed in prepared transactions, unlike tables/views
-- that's the reason I thought about functions
Unfortunately I failed to reproduce a crash or a data corruption.
The most interesting I could see was the following:
--------example 1-------
-- session 1:
begin;
create function pg_temp.foo() returns void as $$begin end;$$ language
plpgsql;
prepare transaction 'z';
create function pg_temp.foo() returns void as $$begin end;$$ language
plpgsql;
-- session 2:
commit prepared 'z';
-- session 1 prints:
-- ERROR: duplicate key value violates unique constraint
"pg_proc_proname_args_nsp_index"
-- DETAIL: Key (proname, proargtypes, pronamespace)=(foo, , 16385)
already exists.
--------example 2-------
-- session 1:
begin;
create function pg_temp.foo() returns void as $$begin end;$$ language
plpgsql;
-- session 2:
begin;
create function pg_temp.foo() returns void as $$begin end;$$ language
plpgsql;
-- session 1:
prepare transaction 'z';
\q
-- session 2:
prepare transaction 'y';
\q
-- session 3:
begin;
create temp table t();
-- session 4:
commit prepared 'z';
commit prepared 'y';
-- session 3 prints:
-- ERROR: duplicate key value violates unique constraint
"pg_namespace_nspname_index"
-- LINE 1: create temp table t();
-- ^
-- DETAIL: Key (nspname)=(pg_temp_3) already exists.
Best,
Alex