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-03-05T20:20:07Z
Lists: pgsql-hackers
Attachments
- just_pg_statistic_set_difference_tests.diff (text/x-patch) patch
On Wed, Mar 4, 2026 at 5:29 PM Michael Paquier <michael@paquier.xyz> wrote: > On Wed, Mar 04, 2026 at 05:05:55PM -0500, Corey Huinker wrote: > > 5. Generate the column list of the view (or set difference queries) with > a > > \gexec query that filters out the oids. > > > > All of these things are sliiightly hacky, but if we settle on one pattern > > that will allow us to use the pattern in multiple places and thus reduce > > surprise to the reader. > > I am not sure which one would be the best fit, TBH. To me, it depends > mostly on clarity and how easier it becomes to maintain these tests. > Perhaps I would have a slight preference on the views with quals based > on the object names. As long as we don't maintain the same > complicated queries more than once, I'm basically fine with any > solution. Using json for this purpose feels a bit too much artistic. > -- > Michael > Here's a proof of concept for just the pg_statistic checks. The basic structure is: 1. Create a VIEW that has only the columns we want to set-difference, in the datatype we want to difference them. The view will never hold data, we just want it for the datatype (t). 2. Create a FUNCTION that fetched the stats for a given object (in this case a table or index), keeping only the columns found in (t). 3. Another FUNCTION that takes two object names as parameters, does the A-B,B-A set difference operators on them, and returns that as a set of (relname,(t)). 4. The A-B,B-A tests then become just one call to that set_difference function. If this seems more elegant than what we have now, I'll write up a formal patch for the three set-difference types (attstats, extended, extended exprs).
Commits
-
Refactor tests for catalog diff comparisons in stats_import.sql
- ccd7abaa456f 19 (unreleased) landed
-
Fix typo in stats_import.sql
- 9e8193a26229 19 (unreleased) landed
-
Add support for "exprs" in pg_restore_extended_stats()
- ba97bf9cb7b4 19 (unreleased) landed
-
Add information about range type stats to pg_stats_ext_exprs
- 307447e6dbc0 19 (unreleased) landed
-
Fix comment in extended_stats_funcs.c
- 9476ef206c64 19 (unreleased) landed