Re: ALTER TABLE .. ADD PRIMARY KEY .. USING INDEX has dump-restore hazard - Mailing list pgsql-hackers

From Michael Paquier
Subject Re: ALTER TABLE .. ADD PRIMARY KEY .. USING INDEX has dump-restore hazard
Date
Msg-id CAB7nPqQBs1s+6eXnmJKMGPi5xgRy+dk8=jOXKiWEmQREi7kgsA@mail.gmail.com
Whole thread Raw
In response to Re: ALTER TABLE .. ADD PRIMARY KEY .. USING INDEX has dump-restore hazard  (Gurjeet Singh <gurjeet@singh.im>)
Responses Re: ALTER TABLE .. ADD PRIMARY KEY .. USING INDEX has dump-restore hazard
List pgsql-hackers
On Thu, Jul 23, 2015 at 5:47 AM, Gurjeet Singh <gurjeet@singh.im> wrote:
> On Wed, Jul 22, 2015 at 7:34 AM, Robert Haas <robertmhaas@gmail.com> wrote:
>>
>> On Tue, Jul 21, 2015 at 8:34 PM, Michael Paquier
>> <michael.paquier@gmail.com> wrote:
>> > On Wed, Jul 22, 2015 at 1:23 AM, Robert Haas <robertmhaas@gmail.com>
>> > wrote:
>> >> Notice that the collation specifier is gone.  Oops.
>> >
>> > As it is not possible to specify directly a constraint for a PRIMARY
>> > KEY expression, what about switching dumpConstraint to have it use
>> > first a CREATE INDEX query with the collation and then use ALTER TABLE
>> > to attach the constraint to it? I am noticing that we already fetch
>> > the index definition in indxinfo via pg_get_indexdef. Thoughts?
>>
>> I guess the questions on my mind is "Why is it that you can't do this
>> directly when creating a primary key, but you can do it when turning
>> an existing index into a primary key?"

Sure. This does not seem to be complicated.

>> If there's a good reason for prohibiting doing this when creating a
>> primary key, then presumably it shouldn't be allowed when turning an
>> index into a primary key either.  If there's not, then why not extend
>> the PRIMARY KEY syntax to allow it?

Yeah, I think we should be able to define a collation in this case.
For example it is as well possible to pass a WITH clause with storage
parameters, though we do not document it in
table_constraint_using_index
(http://www.postgresql.org/docs/devel/static/sql-altertable.html).

> +1. I think in the short term we can treat this as a bug, and "fix" the bug
> by disallowing an index with attributes that cannot be present in an index
> created by PRIMARY KEY constraint. The collation attribute on one of the
> keys may be just one of many such attributes.

Er, pushing such a patch on back-branches may break applications that
do exactly what Robert did in his test case (using a unique index as
primary key with a collation), no? I am not sure that this is
acceptable. Taking the problem at its root by swtiching pg_dump to
define an index and then use it looks a more solid approach on back
branches.

> In the long term, we may want to allow collation in primary key, but that
> will be a feature ideally suited for a major version release.

Yep. Definitely.
-- 
Michael



pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: TABLESAMPLE patch is really in pretty sad shape
Next
From: Kouhei Kaigai
Date:
Subject: Re: fdw_scan_tlist for foreign table scans breaks EPQ testing, doesn't it?