diff options
author | Robert Haas <rhaas@postgresql.org> | 2016-12-22 17:31:52 -0500 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2016-12-22 17:36:37 -0500 |
commit | 2ac3ef7a01df859c62d0a02333b646d65eaec5ff (patch) | |
tree | 850532b8c6aac27df50cff9c45a5873b4c0da743 /src/include/nodes/execnodes.h | |
parent | 12bd7dd317e8f4346fb3507578aca790ede6ebea (diff) | |
download | postgresql-2ac3ef7a01df859c62d0a02333b646d65eaec5ff.tar.gz postgresql-2ac3ef7a01df859c62d0a02333b646d65eaec5ff.zip |
Fix tuple routing in cases where tuple descriptors don't match.
The previous coding failed to work correctly when we have a
multi-level partitioned hierarchy where tables at successive levels
have different attribute numbers for the partition key attributes. To
fix, have each PartitionDispatch object store a standalone
TupleTableSlot initialized with the TupleDesc of the corresponding
partitioned table, along with a TupleConversionMap to map tuples from
the its parent's rowtype to own rowtype. After tuple routing chooses
a leaf partition, we must use the leaf partition's tuple descriptor,
not the root table's. To that end, a dedicated TupleTableSlot for
tuple routing is now allocated in EState.
Amit Langote
Diffstat (limited to 'src/include/nodes/execnodes.h')
-rw-r--r-- | src/include/nodes/execnodes.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h index cc0821bcac9..d43ec56a2b3 100644 --- a/src/include/nodes/execnodes.h +++ b/src/include/nodes/execnodes.h @@ -384,6 +384,9 @@ typedef struct EState TupleTableSlot *es_trig_oldtup_slot; /* for TriggerEnabled */ TupleTableSlot *es_trig_newtup_slot; /* for TriggerEnabled */ + /* Slot used to manipulate a tuple after it is routed to a partition */ + TupleTableSlot *es_partition_tuple_slot; + /* Parameter info: */ ParamListInfo es_param_list_info; /* values of external params */ ParamExecData *es_param_exec_vals; /* values of internal params */ |