On Mon, Feb 24, 2025 at 1:54 PM Jeff Davis <pgsql@j-davis.com> wrote:
On Mon, 2025-02-24 at 13:47 -0500, Corey Huinker wrote: > There doesn't seem to be any way around it, but it will > slightly complicate the dump-ing side of things, in that we need to > either: > > a) switch to attnums for index expressions and keep attname calls for > everything else.
The only stats for indexes are on expression columns, so AFAICT there's no difference between the above description and "use attnums for indexes and attnames for tables". Either way, I agree that's the way to go.
That's true now, but may not be in the future, like if we started keeping separate stats for partial indexes.
We certainly want attnames for tables to keep it working reasonably well for cases where the user might be doing something more interesting than a binary upgrade, as you point out. But attribute numbers for indexes seem much more reliable: an index with a different attribute order is a fundamentally different index.
Sadly, that attnum isn't available in pg_stats, so we'd have to reintroduce the joins to pg_namespace and pg_class to get at pg_attribute, at least for indexes.