Re: PoC/WIP: Extended statistics on expressions
Tomas Vondra <tomas.vondra@enterprisedb.com>
From: Tomas Vondra <tomas.vondra@enterprisedb.com>
To: Zhihong Yu <zyu@yugabyte.com>
Cc: Justin Pryzby <pryzby@telsasoft.com>,
Dean Rasheed <dean.a.rasheed@gmail.com>,
PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2021-01-17T23:14:30Z
Lists: pgsql-hackers
On 1/17/21 3:55 AM, Zhihong Yu wrote:
> Hi,
> + * Check that only the base rel is mentioned. (This should be dead code
> + * now that add_missing_from is history.)
> + */
> + if (list_length(pstate->p_rtable) != 1)
>
> If it is dead code, it can be removed, right ?
>
Maybe. The question is whether it really is dead code. It's copied from
transformIndexStmt so I kept it for now.
> For statext_mcv_clauselist_selectivity:
>
> + // bms_free(list_attnums[listidx]);
> > The commented line can be removed.
>
Actually, this should probably do list_free on the list_exprs.
> +bool
> +examine_clause_args2(List *args, Node **exprp, Const **cstp, bool
> *expronleftp)
>
> Better add some comment for examine_clause_args2 since there
> is examine_clause_args() already.
>
Yeah, this probably needs a better name. I have a feeling this may need
a refactoring to reuse more of the existing code for the expressions.
> + if (!ok || stats->compute_stats == NULL || stats->minrows <= 0)
>
> When would stats->minrows have negative value ?
>
The typanalyze function (e.g. std_typanalyze) can set it to negative
value. This is the same check as in examine_attribute, and we need the
same protections I think.
> For serialize_expr_stats():
>
> + sd = table_open(StatisticRelationId, RowExclusiveLock);
> +
> + /* lookup OID of composite type for pg_statistic */
> + typOid = get_rel_type_id(StatisticRelationId);
> + if (!OidIsValid(typOid))
> + ereport(ERROR,
>
> Looks like the table_open() call can be made after the typOid check.
>
Probably, but this failure is unlikely (should never happen) so I don't
think this makes any real difference.
> + Datum values[Natts_pg_statistic];
> + bool nulls[Natts_pg_statistic];
> + HeapTuple stup;
> +
> + if (!stats->stats_valid)
>
> It seems the local arrays can be declared after the validity check.
>
Nope, that would be against C99.
> + if (enabled[i] == STATS_EXT_NDISTINCT)
> + ndistinct_enabled = true;
> + if (enabled[i] == STATS_EXT_DEPENDENCIES)
> + dependencies_enabled = true;
> + if (enabled[i] == STATS_EXT_MCV)
>
> the second and third if should be preceded with 'else'
>
Yeah, although this just moves existing code. But you're right it could
use else.
> +ReleaseDummy(HeapTuple tuple)
> +{
> + pfree(tuple);
>
> Since ReleaseDummy() is just a single pfree call, maybe you don't need
> this method - call pfree in its place.
>
No, that's not possible because the freefunc callback expects signature
void (*)(HeapTupleData *)
and pfree() does not match that.
thanks
--
Tomas Vondra
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
Commits
-
Disallow extended statistics on system columns
- 66061077155d 14.0 landed
- c9eeef2a15c0 15.0 landed
-
Identify simple column references in extended statistics
- 50ba70a957f9 14.0 landed
- 537ca68dbb24 15.0 landed
-
Don't print extra parens around expressions in extended stats
- 4d1816ec26e8 14.0 landed
- 13380e147649 15.0 landed
-
Change position of field "transformed" in struct CreateStatsStmt.
- 13a1ca160dcf 14.0 landed
-
Add transformed flag to nodes/*funcs.c for CREATE STATISTICS
- d57ecebd128c 14.0 landed
-
Stabilize stats_ext test with other collations
- 2a058e938c73 14.0 landed
-
Extended statistics on expressions
- a4d75c86bf15 14.0 landed
-
Reduce duration of stats_ext regression tests
- 98376c18f12e 14.0 landed
-
Allow composite types in catalog bootstrap
- 79f6a942bdb9 14.0 landed
-
Convert Typ from array to list in bootstrap
- e1a5e65703ce 14.0 landed
-
Disallow CREATE STATISTICS on system catalogs
- c22539756ee5 10.16 landed
- f52db969440b 11.11 landed
- 943a113bcb6f 12.6 landed
- d26d4c717dbf 13.2 landed
- c9a0dc34865f 14.0 landed