pgsql: Fix some more cases of missed GENERATED-column updates. - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Fix some more cases of missed GENERATED-column updates.
Date
Msg-id E1pZKIv-002G8r-7U@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Fix some more cases of missed GENERATED-column updates.

If UPDATE is forced to retry after an EvalPlanQual check, it neglected
to repeat GENERATED-column computations, even though those might well
have changed since we're dealing with a different tuple than before.
Fixing this is mostly a matter of looping back a bit further when
we retry.  In v15 and HEAD that's most easily done by altering the API
of ExecUpdateAct so that it includes computing GENERATED expressions.

Also, if an UPDATE in a partitioned table turns into a cross-partition
INSERT operation, we failed to recompute GENERATED columns.  That's a
bug since 8bf6ec3ba allowed partitions to have different generation
expressions; although it seems to have no ill effects before that.
Fixing this is messier because we can now have situations where the same
query needs both the UPDATE-aligned set of GENERATED columns and the
INSERT-aligned set, and it's unclear which set will be generated first
(else we could hack things by forcing the INSERT-aligned set to be
generated, which is indeed how fe9e658f4 made it work for MERGE).
The best fix seems to be to build and store separate sets of expressions
for the INSERT and UPDATE cases.  That would create ABI issues in the
back branches, but so far it seems we can leave this alone in the back
branches.

Per bug #17823 from Hisahiro Kauchi.  The first part of this affects all
branches back to v12 where GENERATED columns were added.

Discussion: https://postgr.es/m/17823-b64909cf7d63de84@postgresql.org

Branch
------
REL_14_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/1e05ea51d327635ce56caab56cc47e70716e081f

Modified Files
--------------
src/backend/executor/execUtils.c               |   2 +-
src/backend/executor/nodeModifyTable.c         |  26 +--
src/test/isolation/expected/eval-plan-qual.out | 304 +++++++++++++------------
src/test/isolation/specs/eval-plan-qual.spec   |  21 +-
src/test/regress/expected/generated.out        |  14 ++
src/test/regress/sql/generated.sql             |   4 +
6 files changed, 207 insertions(+), 164 deletions(-)


pgsql-committers by date:

Previous
From: Michael Paquier
Date:
Subject: pgsql: Silence -Wmissing-braces complaints in file_utils.c
Next
From: Michael Paquier
Date:
Subject: pgsql: Improve cleanup phases in regression tests of pg_stat_statements