Re: BUG #10316: Alter table rename fails if the "new name" starts with '_' - Mailing list pgsql-bugs

From Tom Lane
Subject Re: BUG #10316: Alter table rename fails if the "new name" starts with '_'
Date
Msg-id 1488.1400090330@sss.pgh.pa.us
Whole thread Raw
In response to BUG #10316: Alter table rename fails if the "new name" starts with '_'  (parthibanp2@gmail.com)
List pgsql-bugs
parthibanp2@gmail.com writes:
> -- I have created one new table with name t1

> test=# \d
> No relations found.
> test=# create table t1 (name varchar(10));
> CREATE TABLE

> -- After that i tried to rename 't1' table as '_t1', now the Postgres server
> saying '_t1' is already exists. i'm sure there is no other table in the
> database other than 't1'.

> test=# alter table t1 rename to _t1;
> ERROR:  type "_t1" already exists

Note it's saying *type* _t1 already exists.  This is the internal name
of the type t1[], that is, arrays of the rowtype of t1.  In general,
our convention for the internal name of an array type is to prepend
a _ to the name of its element type.  (There's some logic to choose
a different name if this name is already taken, but that doesn't help
you when it's the array type that got there first.)

> -- Now i renaming table from 't1' to '__t1' and again i renaming from '__t1'
> to '_t1' now its working.

You could have renamed to anything else and then back to _t1; the trick is
just that the table's rowtype and array type have to get renamed out of
the way first.  By and large, though, it's probably best to avoid using
table names that begin with an underscore in PG, since you'll tend to
hit this kind of conflict with rowtype names if you do that.

            regards, tom lane

pgsql-bugs by date:

Previous
From: Tim Channell
Date:
Subject: Re: BUG #10315: Transactions seem to be releasing locks early?
Next
From: David G Johnston
Date:
Subject: Re: BUG #10315: Transactions seem to be releasing locks early?