diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2019-01-14 19:25:19 -0300 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2019-01-14 19:25:19 -0300 |
commit | 74aa7e046e4a3927d506bc651261724539f67139 (patch) | |
tree | 08506b5c9416e9e22598ee2b1cb816bd2912816d /src | |
parent | 20b4ed8d03047501cc28b600973564850bd1dd80 (diff) | |
download | postgresql-74aa7e046e4a3927d506bc651261724539f67139.tar.gz postgresql-74aa7e046e4a3927d506bc651261724539f67139.zip |
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
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/commands/indexcmds.c | 2 | ||||
-rw-r--r-- | src/test/regress/expected/indexing.out | 3 | ||||
-rw-r--r-- | src/test/regress/sql/indexing.sql | 1 |
3 files changed, 5 insertions, 1 deletions
diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 965b9f0d232..fec5bc5dd64 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -722,7 +722,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 225f4e95274..11fdcdc3b21 100644 --- a/src/test/regress/expected/indexing.out +++ b/src/test/regress/expected/indexing.out @@ -1384,3 +1384,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 f145384fbc9..8c5a0024eef 100644 --- a/src/test/regress/sql/indexing.sql +++ b/src/test/regress/sql/indexing.sql @@ -739,3 +739,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 |