Re: BUG #5288: Restoring a 7.4.5 -Fc dump using -j 2 segfaults (patch included) - Mailing list pgsql-bugs

From Tom Lane
Subject Re: BUG #5288: Restoring a 7.4.5 -Fc dump using -j 2 segfaults (patch included)
Date
Msg-id 12493.1263921315@sss.pgh.pa.us
Whole thread Raw
In response to BUG #5288: Restoring a 7.4.5 -Fc dump using -j 2 segfaults (patch included)  ("Jon Erdman (aka StuckMojo)" <postgresql@thewickedtribe.net>)
Responses Re: BUG #5288: Restoring a 7.4.5 -Fc dump using -j 2 segfaults (patch included)  (Jon Erdman <postgresql@thewickedtribe.net>)
Re: BUG #5288: Restoring a 7.4.5 -Fc dump using -j 2 segfaults (patch included)  (Chris Travers <chris@metatrontech.com>)
List pgsql-bugs
"Jon Erdman (aka StuckMojo)" <postgresql@thewickedtribe.net> writes:
> So, I still run 7.4.5 for my medical billing app, and in playing around with
> 8.5 at AustinPUG last week I discovered that if I try to restore one of my
> backups from 7.4 (produced with 7.4 pg_dump) into 8.5devel using 8.5
> pg_restore and -j 2, it immediately segfaults. 8.4 does as well.

Ouch.

> I built 8.5 with debug to get a bt and investigate what's going on, and I
> found that it's a dependency in the archive TOC that is much higher than the
> highest dump id in the TOC. This doesn't seem all that odd, considering the
> comment right above the offending block says there can be deps to things
> that aren't in the archive. This causes the code to index way off the end of
> the array of TOC entries by dumpId.

No, the problem is that back then the dependencies meant something
completely different; they were object OIDs not dump ID numbers.

I think what we have to do is forbid -j restores from archives older
than archive version 1.8 (ie, pg_dump 8.0).  It doesn't seem worth it
to try to support parallel restore from nearly-obsolete versions, and
I suspect that we couldn't do it even if we tried --- the reason the
representation got changed is that the old way simply didn't work for
any significant use of the dependency info.  Just ignoring the
dependencies, as your patch effectively proposes, is going to lead to
restore failures or worse.

It seems like a good idea to put a range check into that loop as well,
but I think it should throw error not silently ignore bad data ...

Thanks for the report!

            regards, tom lane

pgsql-bugs by date:

Previous
From: "Kevin Grittner"
Date:
Subject: Re: BUG #5284: Postgres CPU 100% and worker took too long to start; cancelled... Systemdown
Next
From: Jon Erdman
Date:
Subject: Re: BUG #5288: Restoring a 7.4.5 -Fc dump using -j 2 segfaults (patch included)