Re: BUG #16671: "generated always as" is ignored when updating table through view

Tom Lane <tgl@sss.pgh.pa.us>

From: Tom Lane <tgl@sss.pgh.pa.us>
To: Peter Eisentraut <peter.eisentraut@2ndquadrant.com>
Cc: rad@killian.email, pgsql-bugs@lists.postgresql.org
Date: 2020-10-14T22:45:53Z
Lists: pgsql-bugs
I wrote:
> PG Bug reporting form <noreply@postgresql.org> writes:
>> [ updating via a view fails to recalculate GENERATED columns ]

> Yeah, that's surely a bug.  In fact, it's a regression, because
> the test case works as-expected in v12.  Not sure where we broke it.

git bisect blames

c6679e4fca21d253ced84c51ac1a31c1b2aec72f is the first bad commit
commit c6679e4fca21d253ced84c51ac1a31c1b2aec72f
Author: Peter Eisentraut <peter@eisentraut.org>
Date:   Mon Feb 17 15:19:58 2020 +0100

    Optimize update of tables with generated columns
    
    When updating a table row with generated columns, only recompute those
    generated columns whose base columns have changed in this update and
    keep the rest unchanged.  This can result in a significant performance
    benefit.  The required information was already kept in
    RangeTblEntry.extraUpdatedCols; we just have to make use of it.
    
    Reviewed-by: Pavel Stehule <pavel.stehule@gmail.com>
    Discussion: https://www.postgresql.org/message-id/flat/b05e781a-fa16-6b52-6738-761181204567@2ndquadrant.com


			regards, tom lane



Commits

  1. Calculate extraUpdatedCols in query rewriter, not parser.

  2. Optimize update of tables with generated columns