mirror of
https://github.com/postgres/postgres.git
synced 2025-05-06 19:59:18 +03:00
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
This commit is contained in:
parent
bb24439cef
commit
0ad41cf537
@ -721,7 +721,7 @@ DefineIndex(Oid relationId,
|
|||||||
errdetail("%s constraints cannot be used when partition keys include expressions.",
|
errdetail("%s constraints cannot be used when partition keys include expressions.",
|
||||||
constraint_type)));
|
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])
|
if (key->partattrs[i] == indexInfo->ii_IndexAttrNumbers[j])
|
||||||
{
|
{
|
||||||
|
@ -1411,3 +1411,6 @@ insert into covidxpart values (4, 1);
|
|||||||
insert into covidxpart values (4, 1);
|
insert into covidxpart values (4, 1);
|
||||||
ERROR: duplicate key value violates unique constraint "covidxpart4_a_b_idx"
|
ERROR: duplicate key value violates unique constraint "covidxpart4_a_b_idx"
|
||||||
DETAIL: Key (a)=(4) already exists.
|
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.
|
||||||
|
@ -756,3 +756,4 @@ create unique index on covidxpart4 (a);
|
|||||||
alter table covidxpart attach partition covidxpart4 for values in (4);
|
alter table covidxpart attach partition covidxpart4 for values in (4);
|
||||||
insert into covidxpart values (4, 1);
|
insert into covidxpart values (4, 1);
|
||||||
insert into covidxpart values (4, 1);
|
insert into covidxpart values (4, 1);
|
||||||
|
create unique index on covidxpart (b) include (a); -- should fail
|
||||||
|
Loading…
x
Reference in New Issue
Block a user