Re: BUG #16758: create temporary table with the same name loses defaults, indexes

Tom Lane <tgl@sss.pgh.pa.us>

From: Tom Lane <tgl@sss.pgh.pa.us>
To: marc@guidance.nl
Cc: pgsql-bugs@lists.postgresql.org
Date: 2020-12-01T15:58:56Z
Lists: pgsql-bugs
PG Bug reporting form <noreply@postgresql.org> writes:
> In 12.5 (and later), in a clean, empty database (in this case the default
> 12.5 docker image), when I execute the following lines:

>     create table xx (name text NOT NULL default '', PRIMARY KEY(name));
>     create temporary table xx
>         (like xx including DEFAULTS including CONSTRAINTS including INDEXES);

Hm, interesting.  Without having dug into the code, I bet what is
happening is that after creating pg_temp.xx, the LIKE code is looking
to see "what indexes exist on table xx?", to which the answer is "none"
because it finds pg_temp.xx.  We need to nail down the schema in which
xx is sought for that step.  As a workaround, you could nail down the
schema manually:

create temporary table xx (like public.xx including DEFAULTS including
CONSTRAINTS including INDEXES);

The ordering of these operations got rearranged recently to fix some
other bugs, so it doesn't surprise me if it used to work differently.

			regards, tom lane



Commits

  1. Ensure that expandTableLikeClause() re-examines the same table.