Re: BUG #15061: Cannot use TEMP TABLE ON COMMIT DROP in extension

From: Michael Paquier <michael(at)paquier(dot)xyz>
To: myon(at)debian(dot)org, pgsql-bugs(at)lists(dot)postgresql(dot)org
Subject: Re: BUG #15061: Cannot use TEMP TABLE ON COMMIT DROP in extension
Date: 2018-02-13 05:27:32
Message-ID: 20180213052732.GF2915@paquier.xyz
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On Mon, Feb 12, 2018 at 05:35:56PM +0000, PG Bug reporting form wrote:
> Seen on 10.2 and git HEAD.
>
> Workarounds:
> 1) Explicitly drop the table within the .control file
> 2) Don't use ON COMMIT DROP (but that leaks the temp tables to the invoking
> session)

Even dropping the dependency link between the temporary relation and its
extension is tricky because the ON COMMIT DROP happens within a hook
at transaction commit after create_extension and CurrentExtensionObject
are reset. One dirty trick I can think of here is to directly delete
the dependency within pg_depend, say in your extension script:
create temp table aa (a int);
delete from pg_depend where objid = 'aa'::regclass and refclassid = 'pg_extension'::regclass;

This makes sure the extension is able to drop the object correctly.

Have you actually thought about using unlogged tables? Keeping around
relation definitions is not a big deal usually for upgrade scenarios,
and temporary tables generate WAL, so if you move your data with a
two-step process you never want to generate the same WAL data twice,
making the upgrade perform faster.
--
Michael

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Marko Tiikkaja 2018-02-13 11:08:52 Re: BUG #15060: Row in table not found when using pg function in an expression
Previous Message 石勇虎 2018-02-13 04:48:37 答复: response time is very long in PG9.5.5 using psql or jdbc