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).