pgsql: Clean up planner confusion between ncolumns and nkeycolumns.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Clean up planner confusion between ncolumns and nkeycolumns.
Date: 2019-02-12 23:38:43
Message-ID: E1gthdT-0007Wt-J3@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Clean up planner confusion between ncolumns and nkeycolumns.

We're only going to consider key columns when creating indexquals,
so there is no point in having the outer loops in indxpath.c iterate
further than nkeycolumns.

Doing so in match_pathkeys_to_index() is actually wrong, and would have
caused crashes by now, except that we have no index AMs supporting both
amcanorderbyop and amcaninclude.

It's also wrong in relation_has_unique_index_for(). The effect there is
to fail to prove uniqueness even when the index does prove it, if there
are extra columns.

Also future-proof examine_variable() for the day when extra columns can
be expressions, and fix what's either a thinko or just an oversight in
btcostestimate(): we should consider the number of key columns, not the
total, when deciding whether to derate correlation.

None of these things seemed important enough to risk changing in a
just-before-wrap patch, but since we're past the release wrap window,
time to fix 'em.

Discussion: https://postgr.es/m/25526.1549847928@sss.pgh.pa.us

Branch
------
REL_11_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/364857f738982da58c0be33cf968d2bbbd496efd

Modified Files
--------------
src/backend/optimizer/path/indxpath.c | 23 ++++++++++++-----------
src/backend/utils/adt/selfuncs.c | 7 ++++++-
2 files changed, 18 insertions(+), 12 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Thomas Munro 2019-02-13 00:49:02 pgsql: Fix rare dsa_allocate() failures due to freepage.c corruption.
Previous Message pgsql 2019-02-12 23:08:24 pgsql: Tag refs/tags/REL9_6_12 was created