mirror of
https://github.com/postgres/postgres.git
synced 2025-06-16 06:01:02 +03:00
Invalid parent's relcache after CREATE TABLE .. PARTITION OF.
Otherwise, subsequent commands in the same transaction see the wrong partition descriptor. Amit Langote. Reported by Tomas Vondra and David Fetter. Reviewed by me. Discussion: http://postgr.es/m/22dd313b-d7fd-22b5-0787-654845c8f849%402ndquadrant.com Discussion: http://postgr.es/m/20161215090916.GB20659%40fetter.org
This commit is contained in:
@ -777,10 +777,11 @@ DefineRelation(CreateStmt *stmt, char relkind, Oid ownerId,
|
||||
* it does not return on error.
|
||||
*/
|
||||
check_new_partition_bound(relname, parent, bound);
|
||||
heap_close(parent, NoLock);
|
||||
|
||||
/* Update the pg_class entry. */
|
||||
StorePartitionBound(rel, bound);
|
||||
StorePartitionBound(rel, parent, bound);
|
||||
|
||||
heap_close(parent, NoLock);
|
||||
|
||||
/*
|
||||
* The code that follows may also update the pg_class tuple to update
|
||||
@ -13141,7 +13142,7 @@ ATExecAttachPartition(List **wqueue, Relation rel, PartitionCmd *cmd)
|
||||
cmd->bound);
|
||||
|
||||
/* Update the pg_class entry. */
|
||||
StorePartitionBound(attachRel, cmd->bound);
|
||||
StorePartitionBound(attachRel, rel, cmd->bound);
|
||||
|
||||
/*
|
||||
* Generate partition constraint from the partition bound specification.
|
||||
@ -13352,12 +13353,6 @@ ATExecAttachPartition(List **wqueue, Relation rel, PartitionCmd *cmd)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Invalidate the parent's relcache so that the new partition is now
|
||||
* included its partition descriptor.
|
||||
*/
|
||||
CacheInvalidateRelcache(rel);
|
||||
|
||||
ObjectAddressSet(address, RelationRelationId, RelationGetRelid(attachRel));
|
||||
|
||||
/* keep our lock until commit */
|
||||
|
Reference in New Issue
Block a user