Re: Is temporary functions feature official/supported? Found some issues with it.
Alexey Bashtanov <bashtanov@imap.cc>
From: Alexey Bashtanov <bashtanov@imap.cc>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: pgsql-bugs@postgresql.org, alvherre@2ndquadrant.com, dimitri@citusdata.com
Date: 2019-01-04T13:13:15Z
Lists: pgsql-bugs
> 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
Commits
-
Restrict the use of temporary namespace in two-phase transactions
- b15160bc716e 10.7 landed
- 3e4fdb3bc0dc 11.2 landed
- c5660e0aa52d 12.0 landed