Hello.
Attached is a new patch set that fixes a few issues identified in the last set.
0001 - creates a new way to identify the set of attributes both modified by the update and referenced by one or more
indexeson the target relation being updated. This patch keeps the HeapDetermineColumnsInfo() path within heap_update()
forcalls from simple_heap_update() when modified_attrs_valid is set to false. I'm not a huge fan of this, but it does
serveas a way to illustrate a minimal set of changes easing review a bit.
0002 - splits out the top portion of heap_update() into both heapam_tuple_update() and simple_heap_update(), adds a few
helperfunctions and tries to reduce repeated code. The goal here was to remove some of the mess related to the various
bitmapsused to make decisions during the update.
Performance tests so far haven't shown a regression of note for this set of changes.
I'm still working on:
a) cleaning this up a bit more
b) create ExecCheckUpdateRequiresReplicaId() in executor
c) look for a way to cleanly pass/maintain per-table AM state during update
d) root cause for difference in tests
e) look into UPDATE WHERE > 1 row performance
best.
-greg