PG Bug reporting form <noreply@postgresql.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