Re: Add expressions to pg_restore_extended_stats()

Corey Huinker <corey.huinker@gmail.com>

From: Corey Huinker <corey.huinker@gmail.com>
To: Michael Paquier <michael@paquier.xyz>
Cc: Chao Li <li.evan.chao@gmail.com>, Tender Wang <tndrwang@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Tomas Vondra <tomas@vondra.me>
Date: 2026-02-04T06:13:05Z
Lists: pgsql-hackers
>
> > Mild change of subject, it seems that we can't get the expression fake
> > attnum context into the errors we re-throw in statatt_build_stavalues -
> it
> > might make sense to to bring a version of that function into
> > extended_stats_funcs where we can add the extra parameters for context
> (and
> > avoid the need for a text datum version of some longish strings that
> we've
> > already just converted from converting json-string to c-string. If I did
> > make a new function, then that'd be 2 statatt_* functions that no longer
> > need to be visible outside of attribute_stats.c. Thoughts on both making
> > the new function, and maybe sending a few of these statatts back to
> > static-land?
>
> Hmm.  I am not sure, that depends.  How much additional information
> would these extra parameter bring to the errors generated in
> statatt_build_stavalues().


Just the index of which expression and the name of the key that fed in the
offending value string.



>   We could also set an error context
> callback (ErrorContextCallback) within import_pg_statistic() or in the
> loop that calls the routine, with some data based on the counter of
> "numexprs" to provide more context about where an error is happening.
>

If you think it would help, I'd be game for that. It's been a while since I
used one of those callbacks, though.


> I have used that in the past to avoid complicating functions across
> multiple levels of a stack (for example, see ReindexPartitions() in
> indexcmds.c with its ReindexErrorInfo).


This may be another such case.

Commits

  1. Refactor tests for catalog diff comparisons in stats_import.sql

  2. Fix typo in stats_import.sql

  3. Add support for "exprs" in pg_restore_extended_stats()

  4. Add information about range type stats to pg_stats_ext_exprs

  5. Fix comment in extended_stats_funcs.c