Fix mishandling of OLD/NEW references in subqueries in rule actions.
authorDean Rasheed
Sat, 25 Feb 2023 14:44:49 +0000 (14:44 +0000)
committerDean Rasheed
Sat, 25 Feb 2023 14:44:49 +0000 (14:44 +0000)
commit27ff93d18c2ba921cfbb9e2e38f5fb66c130bc9f
treed6e3b04bc015371647b23fd693f0e7c68c7477c0
parent0f78df719a90e3f992304f63b146b178e676bed2
Fix mishandling of OLD/NEW references in subqueries in rule actions.

If a rule action contains a subquery that refers to columns from OLD
or NEW, then those are really lateral references, and the planner will
complain if it sees such things in a subquery that isn't marked as
lateral. However, at rule-definition time, the user isn't required to
mark the subquery with LATERAL, and so it can fail when the rule is
used.

Fix this by marking such subqueries as lateral in the rewriter, at the
point where they're used.

Dean Rasheed and Tom Lane, per report from Alexander Lakhin.
Back-patch to all supported branches.

Discussion: https://postgr.es/m/5e09da43-aaba-7ea7-0a51-a2eb981b058b%40gmail.com
src/backend/rewrite/rewriteHandler.c
src/test/regress/expected/rules.out
src/test/regress/sql/rules.sql