pgsql: Fix state reversal after partition tuple routing

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Fix state reversal after partition tuple routing
Date: 2018-03-19 20:46:31
Message-ID: E1ey1fr-0008Id-PD@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix state reversal after partition tuple routing

We make some changes to ModifyTableState and the EState it uses whenever
we route tuples to partitions; but we weren't restoring properly in all
cases, possibly causing crashes when partitions with different tuple
descriptors are targeted by tuples inserted in the same command.
Refactor some code, creating ExecPrepareTupleRouting, to encapsulate the
needed state changing logic, and have it invoked one level above its
current place (ie. put it in ExecModifyTable instead of ExecInsert);
this makes it all more readable.

Add a test case to exercise this.

We don't support having views as partitions; and since only views can
have INSTEAD OF triggers, there is no point in testing for INSTEAD OF
when processing insertions into a partitioned table. Remove code that
appears to support this (but which is actually never relevant.)

In passing, fix location of some very confusing comments in
ModifyTableState.

Reported-by: Amit Langote
Author: Etsuro Fujita, Amit Langote
Discussion: https://postgr/es/m/0473bf5c-57b1-f1f7-3d58-455c2230bc5f@lab.ntt.co.jp

Branch
------
REL_10_STABLE

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

Modified Files
--------------
src/backend/commands/copy.c | 20 +--
src/backend/executor/nodeModifyTable.c | 216 ++++++++++++++++++---------------
src/include/nodes/execnodes.h | 17 ++-
src/test/regress/expected/insert.out | 26 ++++
src/test/regress/sql/insert.sql | 23 ++++
5 files changed, 189 insertions(+), 113 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Alvaro Herrera 2018-03-19 21:03:38 pgsql: Expand comment a little bit
Previous Message Robert Haas 2018-03-19 15:57:25 pgsql: Generate a separate upper relation for each stage of setop plann