pgsql: Identify simple column references in extended statistics

From: Tomas Vondra <tomas(dot)vondra(at)postgresql(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Identify simple column references in extended statistics
Date: 2021-09-01 16:40:04
Message-ID: E1mLTHQ-000500-Qz@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Identify simple column references in extended statistics

Until now, when defining extended statistics, everything except a plain
column reference was treated as complex expression. So for example "a"
was a column reference, but "(a)" would be an expression. In most cases
this does not matter much, but there were a couple strange consequences.
For example

CREATE STATISTICS s ON a FROM t;

would fail, because extended stats require at least two columns. But

CREATE STATISTICS s ON (a) FROM t;

would succeed, because that requirement does not apply to expressions.
Moreover, that statistics object is useless - the optimizer will always
use the regular statistics collected for attribute "a".

So do a bit more work to identify those expressions referencing a single
column, and translate them to a simple column reference. Backpatch to
14, where support for extended statistics on expressions was introduced.

Reported-by: Justin Pryzby
Backpatch-through: 14
Discussion: https://postgr.es/m/20210816013255.GS10479%40telsasoft.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/537ca68dbb2463f7b1c44e9466b8fbdd7505b2e1

Modified Files
--------------
src/backend/commands/statscmds.c | 37 +++++++++++++++++++++++++++------
src/test/regress/expected/stats_ext.out | 2 ++
src/test/regress/sql/stats_ext.sql | 1 +
3 files changed, 34 insertions(+), 6 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2021-09-01 20:21:20 pgsql: Refactor postgresImportForeignSchema to avoid code duplication.
Previous Message Tomas Vondra 2021-09-01 16:39:48 pgsql: Identify simple column references in extended statistics