Re: Is this a bug?

Lists: pgsql-hackers
From: "Matthew T(dot) O'Connor" <matthew(at)zeut(dot)net>
To: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Is this a bug?
Date: 2005-01-25 17:43:16
Message-ID: 41F68534.4070806@zeut.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

I think this may have been discussed before but I found this a bit
surprising:

foo=# SELECT version();

version
---------------------------------------------------------------------------------------------------------
PostgreSQL 7.4.3 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.3.2
20031022 (Red Hat Linux 3.3.2-1)
(1 row)

foo=# create table foo (id1 int, id2 int, id3 int);
CREATE TABLE
foo=# ALTER TABLE foo ADD unique (id1,id2);
NOTICE: ALTER TABLE / ADD UNIQUE will create implicit index
"foo_id1_key" for table "foo"
ALTER TABLE
foo=# ALTER TABLE foo ADD unique (id1,id3);
NOTICE: ALTER TABLE / ADD UNIQUE will create implicit index
"foo_id1_key" for table "foo"
ERROR: relation "foo_id1_key" already exists
foo=#

Now, I know I can specify a constraint name inside the alter command,
but I still expected this to work.

Thanks,

Matthew


From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: "Matthew T(dot) O'Connor" <matthew(at)zeut(dot)net>
Cc: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Is this a bug?
Date: 2005-01-25 17:59:26
Message-ID: 5185.1106675966@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

"Matthew T. O'Connor" <matthew(at)zeut(dot)net> writes:
> Now, I know I can specify a constraint name inside the alter command,
> but I still expected this to work.

It does, in 8.0.

regression=# create table foo (id1 int, id2 int, id3 int);
CREATE TABLE
regression=# ALTER TABLE foo ADD unique (id1,id2);
NOTICE: ALTER TABLE / ADD UNIQUE will create implicit index "foo_id1_key" for table "foo"
ALTER TABLE
regression=# ALTER TABLE foo ADD unique (id1,id3);
NOTICE: ALTER TABLE / ADD UNIQUE will create implicit index "foo_id1_key1" for table "foo"
ALTER TABLE
regression=#

Of course there's no free lunch: it's significantly harder to guess what
the index name will be...

regards, tom lane


From: Michael Fuhr <mike(at)fuhr(dot)org>
To: "Matthew T(dot) O'Connor" <matthew(at)zeut(dot)net>
Cc: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Is this a bug?
Date: 2005-01-25 18:00:32
Message-ID: 20050125180032.GA57609@winnie.fuhr.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

On Tue, Jan 25, 2005 at 12:43:16PM -0500, Matthew T. O'Connor wrote:

> foo=# ALTER TABLE foo ADD unique (id1,id3);
> NOTICE: ALTER TABLE / ADD UNIQUE will create implicit index
> "foo_id1_key" for table "foo"
> ERROR: relation "foo_id1_key" already exists

8.0.0 handles this situation better:

test=> create table foo (id1 int, id2 int, id3 int);
CREATE TABLE
test=> ALTER TABLE foo ADD unique (id1,id2);
NOTICE: ALTER TABLE / ADD UNIQUE will create implicit index "foo_id1_key" for table "foo"
ALTER TABLE
test=> ALTER TABLE foo ADD unique (id1,id3);
NOTICE: ALTER TABLE / ADD UNIQUE will create implicit index "foo_id1_key1" for table "foo"
ALTER TABLE

--
Michael Fuhr
http://www.fuhr.org/~mfuhr/