mirror of
https://github.com/postgres/postgres.git
synced 2025-07-09 22:41:56 +03:00
Temporary revert 5c6110c6a9
It discovers one more bug in CompareIndexInfo(), should be fixed first.
This commit is contained in:
@ -342,7 +342,6 @@ DefineIndex(Oid relationId,
|
|||||||
Oid tablespaceId;
|
Oid tablespaceId;
|
||||||
Oid createdConstraintId = InvalidOid;
|
Oid createdConstraintId = InvalidOid;
|
||||||
List *indexColNames;
|
List *indexColNames;
|
||||||
List *allIndexParams;
|
|
||||||
Relation rel;
|
Relation rel;
|
||||||
Relation indexRelation;
|
Relation indexRelation;
|
||||||
HeapTuple tuple;
|
HeapTuple tuple;
|
||||||
@ -379,16 +378,16 @@ DefineIndex(Oid relationId,
|
|||||||
numberOfKeyAttributes = list_length(stmt->indexParams);
|
numberOfKeyAttributes = list_length(stmt->indexParams);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calculate the new list of index columns including both key columns and
|
* We append any INCLUDE columns onto the indexParams list so that we have
|
||||||
* INCLUDE columns. Later we can determine which of these are key columns,
|
* one list with all columns. Later we can determine which of these are
|
||||||
* and which are just part of the INCLUDE list by checking the list
|
* key columns, and which are just part of the INCLUDE list by checking
|
||||||
* position. A list item in a position less than ii_NumIndexKeyAttrs is
|
* the list position. A list item in a position less than
|
||||||
* part of the key columns, and anything equal to and over is part of the
|
* ii_NumIndexKeyAttrs is part of the key columns, and anything equal to
|
||||||
* INCLUDE columns.
|
* and over is part of the INCLUDE columns.
|
||||||
*/
|
*/
|
||||||
allIndexParams = list_concat(list_copy(stmt->indexParams),
|
stmt->indexParams = list_concat(stmt->indexParams,
|
||||||
list_copy(stmt->indexIncludingParams));
|
stmt->indexIncludingParams);
|
||||||
numberOfAttributes = list_length(allIndexParams);
|
numberOfAttributes = list_length(stmt->indexParams);
|
||||||
|
|
||||||
if (numberOfAttributes <= 0)
|
if (numberOfAttributes <= 0)
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
@ -545,7 +544,7 @@ DefineIndex(Oid relationId,
|
|||||||
/*
|
/*
|
||||||
* Choose the index column names.
|
* Choose the index column names.
|
||||||
*/
|
*/
|
||||||
indexColNames = ChooseIndexColumnNames(allIndexParams);
|
indexColNames = ChooseIndexColumnNames(stmt->indexParams);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Select name for index if caller didn't specify
|
* Select name for index if caller didn't specify
|
||||||
@ -659,7 +658,7 @@ DefineIndex(Oid relationId,
|
|||||||
coloptions = (int16 *) palloc(numberOfAttributes * sizeof(int16));
|
coloptions = (int16 *) palloc(numberOfAttributes * sizeof(int16));
|
||||||
ComputeIndexAttrs(indexInfo,
|
ComputeIndexAttrs(indexInfo,
|
||||||
typeObjectId, collationObjectId, classObjectId,
|
typeObjectId, collationObjectId, classObjectId,
|
||||||
coloptions, allIndexParams,
|
coloptions, stmt->indexParams,
|
||||||
stmt->excludeOpNames, relationId,
|
stmt->excludeOpNames, relationId,
|
||||||
accessMethodName, accessMethodId,
|
accessMethodName, accessMethodId,
|
||||||
amcanorder, stmt->isconstraint);
|
amcanorder, stmt->isconstraint);
|
||||||
@ -887,8 +886,8 @@ DefineIndex(Oid relationId,
|
|||||||
memcpy(part_oids, partdesc->oids, sizeof(Oid) * nparts);
|
memcpy(part_oids, partdesc->oids, sizeof(Oid) * nparts);
|
||||||
|
|
||||||
parentDesc = CreateTupleDescCopy(RelationGetDescr(rel));
|
parentDesc = CreateTupleDescCopy(RelationGetDescr(rel));
|
||||||
opfamOids = palloc(sizeof(Oid) * numberOfKeyAttributes);
|
opfamOids = palloc(sizeof(Oid) * numberOfAttributes);
|
||||||
for (i = 0; i < numberOfKeyAttributes; i++)
|
for (i = 0; i < numberOfAttributes; i++)
|
||||||
opfamOids[i] = get_opclass_family(classObjectId[i]);
|
opfamOids[i] = get_opclass_family(classObjectId[i]);
|
||||||
|
|
||||||
heap_close(rel, NoLock);
|
heap_close(rel, NoLock);
|
||||||
|
@ -1313,27 +1313,3 @@ alter index idxpart2_a_idx attach partition idxpart22_a_idx;
|
|||||||
create index on idxpart (a);
|
create index on idxpart (a);
|
||||||
create table idxpart_another (a int, b int, primary key (a, b)) partition by range (a);
|
create table idxpart_another (a int, b int, primary key (a, b)) partition by range (a);
|
||||||
create table idxpart_another_1 partition of idxpart_another for values from (0) to (100);
|
create table idxpart_another_1 partition of idxpart_another for values from (0) to (100);
|
||||||
-- Test that covering partitioned indexes work in various cases
|
|
||||||
create table covidxpart (a int, b int) partition by list (a);
|
|
||||||
create unique index on covidxpart (a) include (b);
|
|
||||||
create table covidxpart1 partition of covidxpart for values in (1);
|
|
||||||
create table covidxpart2 partition of covidxpart for values in (2);
|
|
||||||
insert into covidxpart values (1, 1);
|
|
||||||
insert into covidxpart values (1, 1);
|
|
||||||
ERROR: duplicate key value violates unique constraint "covidxpart1_a_b_idx"
|
|
||||||
DETAIL: Key (a)=(1) already exists.
|
|
||||||
create table covidxpart3 (b int, c int, a int);
|
|
||||||
alter table covidxpart3 drop c;
|
|
||||||
alter table covidxpart attach partition covidxpart3 for values in (3);
|
|
||||||
insert into covidxpart values (3, 1);
|
|
||||||
insert into covidxpart values (3, 1);
|
|
||||||
ERROR: duplicate key value violates unique constraint "covidxpart3_a_b_idx"
|
|
||||||
DETAIL: Key (a)=(3) already exists.
|
|
||||||
create table covidxpart4 (b int, a int);
|
|
||||||
create unique index on covidxpart4 (a) include (b);
|
|
||||||
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);
|
|
||||||
ERROR: duplicate key value violates unique constraint "covidxpart4_a_b_idx"
|
|
||||||
DETAIL: Key (a)=(4) already exists.
|
|
||||||
|
@ -701,22 +701,3 @@ alter index idxpart2_a_idx attach partition idxpart22_a_idx;
|
|||||||
create index on idxpart (a);
|
create index on idxpart (a);
|
||||||
create table idxpart_another (a int, b int, primary key (a, b)) partition by range (a);
|
create table idxpart_another (a int, b int, primary key (a, b)) partition by range (a);
|
||||||
create table idxpart_another_1 partition of idxpart_another for values from (0) to (100);
|
create table idxpart_another_1 partition of idxpart_another for values from (0) to (100);
|
||||||
|
|
||||||
-- Test that covering partitioned indexes work in various cases
|
|
||||||
create table covidxpart (a int, b int) partition by list (a);
|
|
||||||
create unique index on covidxpart (a) include (b);
|
|
||||||
create table covidxpart1 partition of covidxpart for values in (1);
|
|
||||||
create table covidxpart2 partition of covidxpart for values in (2);
|
|
||||||
insert into covidxpart values (1, 1);
|
|
||||||
insert into covidxpart values (1, 1);
|
|
||||||
create table covidxpart3 (b int, c int, a int);
|
|
||||||
alter table covidxpart3 drop c;
|
|
||||||
alter table covidxpart attach partition covidxpart3 for values in (3);
|
|
||||||
insert into covidxpart values (3, 1);
|
|
||||||
insert into covidxpart values (3, 1);
|
|
||||||
create table covidxpart4 (b int, a int);
|
|
||||||
create unique index on covidxpart4 (a) include (b);
|
|
||||||
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);
|
|
||||||
|
Reference in New Issue
Block a user