Re: pg_restore handles extended statistics inconsistently with statistics data
Michael Paquier <michael@paquier.xyz>
From: Michael Paquier <michael@paquier.xyz>
To: Chao Li <li.evan.chao@gmail.com>
Cc: PostgreSQL-development <pgsql-hackers@lists.postgresql.org>, Michael Paquier <michael.paquier@gmail.com>, Jeff Davis <pgsql@j-davis.com>
Date: 2026-06-12T06:05:46Z
Lists: pgsql-hackers
Attachments
- 0001-Fix-pg_restore-with-schema-and-statistics-only.patch (text/plain) patch 0001
On Thu, Jun 11, 2026 at 11:31:26AM +0800, Chao Li wrote: > I tried the same test against 1ea44d7ddfb, the immediate predecessor > of c32fb29e9. pg_dump dumped relation stats and attribute stats, > while pg_restore restored nothing. So the asymmetric behavior for > stats already existed. c32fb29e9 then added extended stats to both > pg_dump and pg_restore, but the new EXTENDED STATISTICS DATA entries > are handled differently from STATISTICS DATA during selective > pg_restore, making the inconsistency visible. > > The asymmetric behavior was not introduced by c32fb29e9, so I think > we probably should not change that for v19. If it's confirmed that > this needs to be fixed and nobody else plans to work on it, I would > be happy to add it to my TODO list for v20. FWIW, I'm going to disagree with your argument, as I find the behavior of v18 really weird. I would have assumed that the pg_restore --statistics-only should restore all the stats in the schema without the objects in the schema, relation and attribute stats (+extended, only applies with v19), for all the objects in the schema. If you want only the schema definition and not the objects, we already have -s for the job. In your example, the dump in custom format with --statistics looks right to me: object definitions and stats. pg_dump -Fc --statistics-only also looks right: only the stats, no objects. The restore part is bumpy. So I'd like to think that the behavior of the relation and attribute stats is wrong in v18 and v19, and that the behavior of extended stats is actually the right one in v19. Why should custom and plain formats differ when filtering with a --schema and --statistics-only? At the end, it seems to me that the right thing to do is the patch attached, to-be-backpatched down to v18. check-world passes with this patch, so we have never tested really this path, I guess? I could see myself adding a scenario in 003, at least. Jeff or Corey, could you comment please? -- Michael
Commits
-
pg_restore: Use dependency-based matching for STATISTICS DATA
- 477efef089c3 18 (unreleased) landed
- ae39bd23c662 19 (unreleased) landed
-
Fix inconsistencies with pg_restore --statistics[-only]
- 42ffdedcf743 18 (unreleased) landed
- 0dd93de69e80 19 (unreleased) landed