"Jon Erdman (aka StuckMojo)" <postgresql(at)thewickedtribe(dot)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.
> 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
In response to
pgsql-bugs by date
|Next:||From: Jon Erdman||Date: 2010-01-19 18:01:40|
|Subject: Re: BUG #5288: Restoring a 7.4.5 -Fc dump using -j 2 segfaults
|Previous:||From: WildWezyr||Date: 2010-01-19 17:07:45|
|Subject: BUG #5290: Simple loop with insert into and check to avoid duplicate values fails|