Attached update-partition-key_v13.patch now contains this make_resultrels_ordered.patch changes.
I have applied attach patch and got below observation.
Observation : if join producing multiple output rows for a given row to be modified. I am seeing here it is updating a row and also inserting rows in target table. hence after update total count of table got incremented.
below are steps: postgres=# create table part_upd (a int, b int) partition by range(a); CREATE TABLE postgres=# create table part_upd1 partition of part_upd for values from (minvalue) to (-10); CREATE TABLE postgres=# create table part_upd2 partition of part_upd for values from (-10) to (0); CREATE TABLE postgres=# create table part_upd3 partition of part_upd for values from (0) to (10); CREATE TABLE postgres=# create table part_upd4 partition of part_upd for values from (10) to (maxvalue); CREATE TABLE postgres=# insert into part_upd select i,i from generate_series(-30,30,3)i; INSERT 0 21 postgres=# select count(*) from part_upd; count ------- 21 (1 row)
postgres=# postgres=# create table non_part_upd (a int); CREATE TABLE postgres=# insert into non_part_upd select i%2 from generate_series(-30,30,5)i; INSERT 0 13 postgres=# update part_upd t1 set a = (t2.a+10) from non_part_upd t2 where t2.a = t1.b; UPDATE 7 postgres=# select count(*) from part_upd; count ------- 27 (1 row)