Check default partitions constraints while descending
authorAlvaro Herrera
Tue, 8 Sep 2020 22:35:15 +0000 (19:35 -0300)
committerAlvaro Herrera
Tue, 8 Sep 2020 22:35:15 +0000 (19:35 -0300)
commitd0230a43fcae6f923fcedfe6f27db7fca8760d95
treeafd90e37f8ddcac7ecb414560937faa2c8fe5fa7
parentb61d048e0d480f4311c62bf3026879c83ba9aaad
Check default partitions constraints while descending

Partitioning tuple route code assumes that the partition chosen while
descending the partition hierarchy is always the correct one.  This is
true except when the partition is the default partition and another
partition has been added concurrently: the partition constraint changes
and we don't recheck it.  This can lead to tuples mistakenly being added
to the default partition that should have been rejected.

Fix by rechecking the default partition constraint while descending the
hierarchy.

An isolation test based on the reproduction steps described by Hao Wu
(with tweaks for extra coverage) is included.

Backpatch to 12, where this bug came in with 898e5e3290a7.

Reported by: Hao Wu 
Author: Amit Langote 
Author: Álvaro Herrera 
Discussion: https://postgr.es/m/CA+HiwqFqBmcSSap4sFnCBUEL_VfOMmEKaQ3gwUhyfa4c7J_-nA@mail.gmail.com
Discussion: https://postgr.es/m/DM5PR0501MB3910E97A9EDFB4C775CF3D75A42F0@DM5PR0501MB3910.namprd05.prod.outlook.com
src/backend/executor/execPartition.c
src/test/isolation/expected/partition-concurrent-attach.out [new file with mode: 0644]
src/test/isolation/isolation_schedule
src/test/isolation/specs/partition-concurrent-attach.spec [new file with mode: 0644]