mirror of
https://github.com/postgres/postgres.git
synced 2025-06-17 17:02:08 +03:00
Block creation of partitions with open references to its parent
When a partition is created as part of a trigger processing, it is possible that the partition which just gets created changes the properties of the table the executor of the ongoing command relies on, causing a subsequent crash. This has been found possible when for example using a BEFORE INSERT which creates a new partition for a partitioned table being inserted to. Any attempt to do so is blocked when working on a partition, with regression tests added for both CREATE TABLE PARTITION OF and ALTER TABLE ATTACH PARTITION. Reported-by: Dmitry Shalashov Author: Amit Langote Reviewed-by: Michael Paquier, Tom Lane Discussion: https://postgr.es/m/15437-3fe01ee66bd1bae1@postgresql.org Backpatch-through: 10
This commit is contained in:
@ -1993,6 +1993,14 @@ MergeAttributes(List *schema, List *supers, char relpersistence,
|
||||
else
|
||||
relation = heap_openrv(parent, AccessExclusiveLock);
|
||||
|
||||
/*
|
||||
* Check for active uses of the parent partitioned table in the
|
||||
* current transaction, such as being used in some manner by an
|
||||
* enclosing command.
|
||||
*/
|
||||
if (is_partition)
|
||||
CheckTableNotInUse(relation, "CREATE TABLE .. PARTITION OF");
|
||||
|
||||
/*
|
||||
* We do not allow partitioned tables and partitions to participate in
|
||||
* regular inheritance.
|
||||
|
Reference in New Issue
Block a user