Re: [PATCH] Check operator when creating unique index on partition table - Mailing list pgsql-hackers

From Tom Lane
Subject Re: [PATCH] Check operator when creating unique index on partition table
Date
Msg-id 4731.1585155636@sss.pgh.pa.us
Whole thread Raw
In response to [PATCH] Check operator when creating unique index on partition table  (Guancheng Luo <prajnamort@gmail.com>)
Responses Re: [PATCH] Check operator when creating unique index on partitiontable  (Guancheng Luo <prajnamort@gmail.com>)
List pgsql-hackers
Guancheng Luo <prajnamort@gmail.com> writes:
> I found that things could go wrong in some cases, when the unique index and the partition key use different opclass.

I agree that this is an oversight, but it seems like your solution is
overcomplicated and probably still too forgiving.  Should we not just
insist that the index opfamily match the partition key opfamily?
It looks to me like that would reduce the code change to about like
this:

-               if (key->partattrs[i] == indexInfo->ii_IndexAttrNumbers[j])
+               if (key->partattrs[i] == indexInfo->ii_IndexAttrNumbers[j] &&
+                   key->partopfamily[i] == get_opclass_family(classObjectId[j]))

which is a lot more straightforward and provides a lot more certainty
that the index will act as the partition constraint demands.

This would reject, for example, a hash index associated with a btree-based
partition constraint, but I'm not sure we're losing anything much thereby.
(I do not think your patch is correct for the case where the opfamilies
belong to different AMs, anyway.)

I'm not really on board with adding a whole new test script for this,
either.

            regards, tom lane



pgsql-hackers by date:

Previous
From: Robert Haas
Date:
Subject: Re: potential stuck lock in SaveSlotToPath()
Next
From: Rafia Sabih
Date:
Subject: Re: Columns correlation and adaptive query optimization