Re: BUG #15631: Generated as identity field in a temporary table with on commit drop corrupts system catalogs

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: dnsl48(at)gmail(dot)com
Cc: Peter Eisentraut <peter(dot)eisentraut(at)2ndquadrant(dot)com>, pgsql-bugs(at)lists(dot)postgresql(dot)org
Subject: Re: BUG #15631: Generated as identity field in a temporary table with on commit drop corrupts system catalogs
Date: 2019-02-11 20:33:08
Message-ID: 24188.1549917188@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox
Thread:
Lists: pgsql-bugs

PG Bug reporting form <noreply(at)postgresql(dot)org> writes:
> When using `generated by default as identity` in a temporary table with `on
> commit drop`, but without starting a transaction, system catalogs get
> corrupted and won't let create temporary tables anymore.

Interesting. I can reproduce that (don't need the docker bit...).
The temp table goes away, but the sequence is still there, and so
are its pg_depend entries --- including one saying that it depends
on the table. That bollixes later attempts to clean out the temp
namespace, since deletion tries to recurse to the missing table.

Even more interesting, it works if you wrap the CREATE in begin/commit.

I don't have time to probe further right now, but I believe what is
wrong is that we're missing a CommandCounterIncrement call after the
sequence is created, or at least after its internal dependency on the
table column is created. When the transaction commits immediately,
dependency.c fails to see the internal dependency entry and so it
doesn't remove the sequence. Wrapped in a transaction, there's a
CCI somewhere and all is well.

Peter, will you take this?

regards, tom lane

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Ramanarayana 2019-02-11 20:57:31 Re: BUG #15548: Unaccent does not remove combining diacritical characters
Previous Message Hugh Ranalli 2019-02-11 19:20:42 Re: BUG #15548: Unaccent does not remove combining diacritical characters