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

Started by Tom Lanealmost 5 years ago1 messagescomitters
Jump to latest
#1Tom Lane
tgl@sss.pgh.pa.us

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: /messages/by-id/17151-c03a3e6e4ec9aadb@postgresql.org

Branch
------
REL_13_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/7fa367d96bb1ae25f422d6c2a78424f0f9227b5a

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(-)