Remove faulty Assert in partitioned INSERT...ON CONFLICT DO UPDATE. Commit f16241bef mistakenly supposed that INSERT...ON CONFLICT DO UPDATE rejects partitioned target tables. (This may have been accurate when the patch was written, but it was already obsolete when committed.) Hence, there's an assertion that we can't see ItemPointerIndicatesMovedPartitions() in that path, but the assertion is triggerable.
Some other places throw error if they see a moved-across-partitions tuple, but there seems no need for that here, because if we just retry then we get the same behavior as in the update-within-partition case, as demonstrated by the new isolation test. So fix by deleting the faulty Assert. (The fact that this is the fix doubtless explains why we've heard no field complaints: the behavior of a non-assert build is fine.) The TM_Deleted case contains a cargo-culted copy of the same Assert, which I also deleted to avoid confusion, although I believe that one is actually not triggerable. Per our code coverage report, neither the TM_Updated nor the TM_Deleted case were reached at all by existing tests, so this patch adds tests for both. Reported-by: Dmitry Koval <[email protected]> Author: Joseph Koshakow <[email protected]> Reviewed-by: Tom Lane <[email protected]> Discussion: https://postgr.es/m/[email protected] Backpatch-through: 14 Branch ------ REL_14_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/55b5859d41e3ee78aeb09249ec395062cc17f8f4 Modified Files -------------- src/backend/executor/nodeModifyTable.c | 9 ---- .../expected/insert-conflict-do-update-4.out | 63 ++++++++++++++++++++++ src/test/isolation/isolation_schedule | 1 + .../specs/insert-conflict-do-update-4.spec | 42 +++++++++++++++ 4 files changed, 106 insertions(+), 9 deletions(-)
