pgsql: Check equality semantics for unique indexes on partitioned table - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Check equality semantics for unique indexes on partitioned table
Date
Msg-id E1jJiRA-0004JE-3E@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Check equality semantics for unique indexes on partitioned tables.

We require the partition key to be a subset of the set of columns
being made unique, so that physically-separate indexes on the different
partitions are sufficient to enforce the uniqueness constraint.

The existing code checked that the listed columns appear, but did not
inquire into the index semantics, which is a serious oversight given
that different index opclasses might enforce completely different
notions of uniqueness.

Ideally, perhaps, we'd just match the partition key opfamily to the
index opfamily.  But hash partitioning uses hash opfamilies which we
can't directly match to btree opfamilies.  Hence, look up the equality
operator in each family, and accept if it's the same operator.  This
should be okay in a fairly general sense, since the equality operator
ought to precisely represent the opfamily's notion of uniqueness.

A remaining weak spot is that we don't have a cross-index-AM notion of
which opfamily member is "equality".  But we know which one to use for
hash and btree AMs, and those are the only two that are relevant here
at present.  (Any non-core AMs that know how to enforce equality are
out of luck, for now.)

Back-patch to v11 where this feature was introduced.

Guancheng Luo, revised a bit by me

Discussion: https://postgr.es/m/D9C3CEF7-04E8-47A1-8300-CA1DCD5ED40D@gmail.com

Branch
------
REL_12_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/76ea606968c6060549a04f83f9b8608c416085b5

Modified Files
--------------
src/backend/commands/indexcmds.c | 104 +++++++++++++++++++++++++++++----------
1 file changed, 78 insertions(+), 26 deletions(-)


pgsql-committers by date:

Previous
From: Tom Lane
Date:
Subject: pgsql: Improve selectivity estimation for assorted match-style operator
Next
From: Tom Lane
Date:
Subject: pgsql: Add support for binary I/O of ltree, lquery, and ltxtquery types