From: Alvaro Herrera Date: Mon, 14 Jan 2019 22:25:19 +0000 (-0300) Subject: Fix unique INCLUDE indexes on partitioned tables X-Git-Tag: REL_12_BETA1~949 X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=0ad41cf537ea5f076273fcffa4c83a184bd9910f;p=postgresql.git Fix unique INCLUDE indexes on partitioned tables We were considering the INCLUDE columns as part of the key, allowing unicity-violating rows to be inserted in different partitions. Concurrent development conflict in eb7ed3f30634 and 8224de4f42cc. Reported-by: Justin Pryzby Discussion: https://postgr.es/m/20190109065109.GA4285@telsasoft.com --- diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d2639036223..c8c64d9a425 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -721,7 +721,7 @@ DefineIndex(Oid relationId, errdetail("%s constraints cannot be used when partition keys include expressions.", constraint_type))); - for (j = 0; j < indexInfo->ii_NumIndexAttrs; j++) + for (j = 0; j < indexInfo->ii_NumIndexKeyAttrs; j++) { if (key->partattrs[i] == indexInfo->ii_IndexAttrNumbers[j]) { diff --git a/src/test/regress/expected/indexing.out b/src/test/regress/expected/indexing.out index caacf3f7991..118f2c78df4 100644 --- a/src/test/regress/expected/indexing.out +++ b/src/test/regress/expected/indexing.out @@ -1411,3 +1411,6 @@ insert into covidxpart values (4, 1); insert into covidxpart values (4, 1); ERROR: duplicate key value violates unique constraint "covidxpart4_a_b_idx" DETAIL: Key (a)=(4) already exists. +create unique index on covidxpart (b) include (a); -- should fail +ERROR: insufficient columns in UNIQUE constraint definition +DETAIL: UNIQUE constraint on table "covidxpart" lacks column "a" which is part of the partition key. diff --git a/src/test/regress/sql/indexing.sql b/src/test/regress/sql/indexing.sql index 6878cde5098..d4a64c18c7e 100644 --- a/src/test/regress/sql/indexing.sql +++ b/src/test/regress/sql/indexing.sql @@ -756,3 +756,4 @@ create unique index on covidxpart4 (a); alter table covidxpart attach partition covidxpart4 for values in (4); insert into covidxpart values (4, 1); insert into covidxpart values (4, 1); +create unique index on covidxpart (b) include (a); -- should fail