Avoid trying to lock OLD/NEW in a rule with FOR UPDATE.
Tom 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: https://postgr.es/m/17151-c03a3e6e4ec9aadb@postgresql.org
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/parser/analyze.c | modified | +17 −2 |
| src/include/nodes/parsenodes.h | modified | +4 −4 |
| src/test/regress/expected/rules.out | modified | +25 −0 |
| src/test/regress/sql/rules.sql | modified | +14 −0 |
Discussion
- BUG #17151: A SEGV in optimizer 7 messages · 2021-08-18 → 2021-08-19