pgsql: Prevent BEFORE triggers from violating partitioning constraints.

From: Robert Haas <rhaas(at)postgresql(dot)org>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Prevent BEFORE triggers from violating partitioning constraints.
Date: 2017-06-07 17:07:07
Message-ID: E1dIeQF-0006sx-8B@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Prevent BEFORE triggers from violating partitioning constraints.

Since tuple-routing implicitly checks the partitioning constraints
at least for the levels of the partitioning hierarchy it traverses,
there's normally no need to revalidate the partitioning constraint
after performing tuple routing. However, if there's a BEFORE trigger
on the target partition, it could modify the tuple, causing the
partitioning constraint to be violated. Catch that case.

Also, instead of checking the root table's partition constraint after
tuple-routing, check it beforehand. Otherwise, the rules for when
the partitioning constraint gets checked get too complicated, because
you sometimes have to check part of the constraint but not all of it.
This effectively reverts commit 39162b2030fb0a35a6bb28dc636b5a71b8df8d1c
in favor of a different approach altogether.

Report by me. Initial debugging by Jeevan Ladhe. Patch by Amit
Langote, reviewed by me.

Discussion: http://postgr.es/m/CA+Tgmoa9DTgeVOqopieV8d1QRpddmP65aCdxyjdYDoEO5pS5KA@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/15ce775faa428dc91027e4e2d6b7a167a27118b5

Modified Files
--------------
src/backend/commands/copy.c | 19 ++++-
src/backend/executor/execMain.c | 138 ++++++++++++++++-----------------
src/backend/executor/nodeModifyTable.c | 21 ++++-
src/test/regress/expected/insert.out | 15 +++-
src/test/regress/sql/insert.sql | 10 +++
5 files changed, 128 insertions(+), 75 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Peter Eisentraut 2017-06-07 17:54:50 pgsql: Fix updating of pg_subscription_rel from workers
Previous Message Michael Meskes 2017-06-07 14:16:11 pgsql: Fix docs to not claim ECPG's SET CONNECTION is not thread-aware.