pgsql: Avoid trying to lock OLD/NEW in a rule with FOR UPDATE. - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Avoid trying to lock OLD/NEW in a rule with FOR UPDATE.
Date
Msg-id E1mGkf5-0004CJ-HH@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Avoid trying to lock OLD/NEW in a rule with FOR UPDATE.

transformLockingClause neglected to exclude the pseudo-RTEs for
OLD/NEW when processing a rule's query.  This led to odd errors
or even crashes later on.  This bug is very ancient, but it's
not terribly surprising that nobody noticed, since the use-case
for SELECT FOR UPDATE in a non-view rule is somewhere between
thin and non-existent.  Still, crashing is not OK.

Per bug #17151 from Zhiyong Wu.  Thanks to Masahiko Sawada
for analysis of the problem.

Discussion: https://postgr.es/m/17151-c03a3e6e4ec9aadb@postgresql.org

Branch
------
REL_14_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/4649003933522282f03643c5a50fd2eb2a31a783

Modified Files
--------------
src/backend/parser/analyze.c        | 19 +++++++++++++++++--
src/include/nodes/parsenodes.h      |  8 ++++----
src/test/regress/expected/rules.out | 25 +++++++++++++++++++++++++
src/test/regress/sql/rules.sql      | 14 ++++++++++++++
4 files changed, 60 insertions(+), 6 deletions(-)


pgsql-committers by date:

Previous
From: Andres Freund
Date:
Subject: pgsql: Unset MyBEEntry, making elog.c's call to pgstat_get_my_query_id(
Next
From: Peter Eisentraut
Date:
Subject: pgsql: pg_amcheck: Fix block number parsing on command line