Re: Patch to add a primary key using an existing index

Поиск
Список
Период
Сортировка
От Robert Treat
Тема Re: Patch to add a primary key using an existing index
Дата
Msg-id AANLkTi=6-KeUb=fYTrEMAr-eNAn1v9xW+Du9ZCQKTe=o@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Patch to add a primary key using an existing index  (Robert Haas <robertmhaas@gmail.com>)
Ответы Re: Patch to add a primary key using an existing index  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers


On Sat, Dec 4, 2010 at 6:48 AM, Robert Haas <robertmhaas@gmail.com> wrote:
On Dec 4, 2010, at 1:30 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> "Ross J. Reedstrom" <reedstrm@rice.edu> writes:
>> If you consider that an index basically is, in some sense, a pre-canned
>> column list, then:
>
>> ALTER TABLE table_name ADD PRIMARY KEY (column_list);
>> ALTER TABLE table_name ADD PRIMARY KEY USING index_name;
>
>> are parallel constructions. And it avoids the error case of the user
>> providing a column list that doesn't match the index.
>
> +1 for that approach.  One other thought is that ordinarily, the
> add-constraint syntax ensures that the constraint is named the same as
> its underlying index; in fact we go so far as to keep them in sync if
> you rename the index later.  But after
>
> ALTER TABLE table_name ADD CONSTRAINT con_name PRIMARY KEY USING index_name;
>
> they'd be named differently, unless we (a) throw an error or (b)
> forcibly rename the index.  Neither of those ideas seems to satisfy the
> principle of least surprise, but leaving it alone seems like it will
> also lead to confusion later.

I think that might be the best way though.

Haas, are you promoting to leave them different? I'd be comfortable with that. 

I'd also be comfortable with B (renaming with notice, similar to the notice when creating a constraint). Given we rename the constraint when we rename the index, I would not find the reverse behavior terribly surprising. 

Actually I think I'd even be comfortable with A, either you must name the constraint after the index, or you can leave the constraint name out, and we'll use the index name. 
 

> I wonder whether, in the same spirit as not letting the user write a
> column name list that might not match, we should pick a syntax that
> doesn't allow specifying a constraint name different from the index
> name.  In the case where you say CONSTRAINT it'd be a bit plausible
> to write something like
>
> ALTER TABLE table_name ADD CONSTRAINT con_name PRIMARY KEY USING EXISTING INDEX;
>
> (implying that the index to use is named con_name) but I don't know
> what to do if you want to leave off the "CONSTRAINT name" clause.

Because this seems plain weird.


+1

Robert Treat

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Greg Stark
Дата:
Сообщение: Re: FK's to refer to rows in inheritance child
Следующее
От: "Kevin Grittner"
Дата:
Сообщение: Re: Requirement for the Buffer manager to load multiple pages at once