pgsql: Don't convert Consts into Vars during setrefs.c processing. - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Don't convert Consts into Vars during setrefs.c processing.
Date
Msg-id E1c20Kl-0004rz-62@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Don't convert Consts into Vars during setrefs.c processing.

While converting expressions in an upper-level plan node so that they
reference Vars and expressions provided by the input plan node(s),
don't convert plain Const items, even if there happens to be a matching
Const in the input.  It's silly to do so because a Var is more expensive to
execute than a Const.  Moreover, converting can fool ExecCheckPlanOutput's
check that an insert or update query inserts nulls into dropped columns,
leading to "query provides a value for a dropped column" errors during
INSERT or UPDATE on a table with a dropped column.  We could solve this
by making that check more complicated, but I don't see the point; this fix
should save a marginal number of cycles, and it also makes for less messy
EXPLAIN output, as shown by the ensuing regression test result changes.

Per report from Pavel Hanák.  I have not incorporated a test case based
on that example, as there doesn't seem to be a simple way of checking
this in isolation without making a bunch of assumptions about other
planner and SQL-function behavior.

Back-patch to 9.6.  This setrefs.c behavior exists much further back,
but there is not currently reason to think that it causes problems
before 9.6.

Discussion: <83shraampf.fsf@is-it.eu>

Branch
------
REL9_6_STABLE

Details
-------
http://git.postgresql.org/pg/commitdiff/f4d865f22d0f6fab1525786a8b98051d29214f30

Modified Files
--------------
src/backend/optimizer/plan/setrefs.c  | 23 +++++++++++++++++++++++
src/test/regress/expected/inherit.out |  2 +-
2 files changed, 24 insertions(+), 1 deletion(-)


pgsql-committers by date:

Previous
From: Tom Lane
Date:
Subject: pgsql: Don't convert Consts into Vars during setrefs.c processing.
Next
From: Tom Lane
Date:
Subject: pgsql: Don't make FK-based selectivity estimates in inheritance situati