pgsql: Check default partitions constraints while descending

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Check default partitions constraints while descending
Date: 2020-09-08 22:39:01
Message-ID: E1kFmGT-0005Wi-VZ@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

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 <hawu(at)vmware(dot)com>
Author: Amit Langote <amitlangote09(at)gmail(dot)com>
Author: Álvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
Discussion: https://postgr.es/m/CA+HiwqFqBmcSSap4sFnCBUEL_VfOMmEKaQ3gwUhyfa4c7J_-nA@mail.gmail.com
Discussion: https://postgr.es/m/DM5PR0501MB3910E97A9EDFB4C775CF3D75A42F0@DM5PR0501MB3910.namprd05.prod.outlook.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/f481d2823297e692e9d44c9edfd18e626e768b0c

Modified Files
--------------
src/backend/executor/execPartition.c | 127 +++++++++++++++++----
.../expected/partition-concurrent-attach.out | 49 ++++++++
src/test/isolation/isolation_schedule | 1 +
.../specs/partition-concurrent-attach.spec | 43 +++++++
4 files changed, 195 insertions(+), 25 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Alvaro Herrera 2020-09-08 22:39:02 pgsql: Check default partitions constraints while descending
Previous Message Tom Lane 2020-09-08 19:54:34 pgsql: Install an error check into cancel_before_shmem_exit().