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

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

Commit: 2739a281060f0da5c71fd6601b00c95970de1e80
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: 2021-08-19T16:12:36Z
Releases: 10.19
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

Files

Discussion