Re: BUG #19086: pg_dump --data-only selects and do not uses index definitions for the dumped tables.
Andrew Bille <andrewbille@gmail.com>
From: Andrew Bille <andrewbille@gmail.com>
To: Nathan Bossart <nathandbossart@gmail.com>
Cc: pgsql-bugs@lists.postgresql.org
Date: 2025-10-15T02:21:05Z
Lists: pgsql-bugs
> Is this a hypothetical problem or something you've experienced?
The problem is real: when trying to rescue data from a large corrupted
database, we couldn't wait for the index definition query for more than 3
hours.
On Wed, Oct 15, 2025 at 2:36 AM Nathan Bossart <nathandbossart@gmail.com>
wrote:
> On Tue, Oct 14, 2025 at 08:13:52AM +0000, PG Bug reporting form wrote:
> > In case of system indexes corruption the collecting of index definitions
> can
> > take a really long time.
>
> I don't think this qualifies as a bug, but avoiding pg_dump queries when
> possible seems like a good idea. Is this a hypothetical problem or
> something you've experienced?
>
> > - pg_log_info("reading indexes");
> > - getIndexes(fout, tblinfo, numTables);
> > + if (!dataOnly)
> > + {
> > + pg_log_info("reading indexes");
> > + getIndexes(fout, tblinfo, numTables);
> >
> > - pg_log_info("flagging indexes in partitioned tables");
> > - flagInhIndexes(fout, tblinfo, numTables);
> > + pg_log_info("flagging indexes in partitioned tables");
> > + flagInhIndexes(fout, tblinfo, numTables);
> > + }
>
> I think we ordinarily leave it up to the get*() functions to return early.
> For example, getPartitioningInfo() has this near the top:
>
> /* needn't bother if not dumping data */
> if (!fout->dopt->dumpData)
> return;
>
> Also, we need to be certain that nothing getIndexes() gathers is ever used
> for --data-only dumps. That seems plausible, but I haven't looked closely.
>
> --
> nathan
>