Identify simple column references in extended statistics
Tomas Vondra <tomas.vondra@postgresql.org>
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
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/commands/statscmds.c | modified | +31 −6 |
| src/test/regress/expected/stats_ext.out | modified | +2 −0 |
| src/test/regress/sql/stats_ext.sql | modified | +1 −0 |
Discussion
- PoC/WIP: Extended statistics on expressions 107 messages · 2020-11-16 → 2021-09-19