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 Branch ------ master Details ------- http://git.postgresql.org/pg/commitdiff/2ac3ef7a01df859c62d0a02333b646d65eaec5ff Modified Files -------------- src/backend/catalog/partition.c | 74 ++++++++++++++++++++++++++++------ src/backend/commands/copy.c | 31 +++++++++++++- src/backend/executor/nodeModifyTable.c | 27 +++++++++++++ src/include/catalog/partition.h | 7 ++++ src/include/nodes/execnodes.h | 3 ++ src/test/regress/expected/insert.out | 37 +++++++++++++++++ src/test/regress/sql/insert.sql | 26 ++++++++++++ 7 files changed, 190 insertions(+), 15 deletions(-) -- Sent via pgsql-committers mailing list (pgsql-committers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-committers