Fix tuple routing to initialize batching only for inserts
authorTomas Vondra <tomas.vondra@postgresql.org>
Wed, 17 Feb 2021 23:02:00 +0000 (00:02 +0100)
committerTomas Vondra <tomas.vondra@postgresql.org>
Wed, 17 Feb 2021 23:03:45 +0000 (00:03 +0100)
commit927f453a941061e3d5884bab206581c34784e45b
treed959c78ac87ff1274b292e3f8a26f7a1eb7c1986
parentc15283ff429bf318f161bf84768795843b22696d
Fix tuple routing to initialize batching only for inserts

A cross-partition update on a partitioned table is implemented as a
delete followed by an insert. With foreign partitions, this was however
causing issues, because the FDW and core may disagree on when to enable
batching.  postgres_fdw was only allowing batching for plain inserts
(CMD_INSERT) while core was trying to batch the insert component of the
cross-partition update.  Fix by restricting core to apply batching only
to plain CMD_INSERT queries.

It's possible to allow batching for cross-partition updates, but that
will require more extensive changes, so better to leave that for a
separate patch.

Author: Amit Langote
Reviewed-by: Tomas Vondra, Takayuki Tsunakawa
Discussion: https://postgr.es/m/20200628151002.7x5laxwpgvkyiu3q@development
contrib/postgres_fdw/expected/postgres_fdw.out
contrib/postgres_fdw/postgres_fdw.c
contrib/postgres_fdw/sql/postgres_fdw.sql
src/backend/executor/execPartition.c