Should pg_dump refuse to run if DB has different version?

Started by Tom Lanealmost 26 years ago5 messages
#1Tom Lane
tgl@sss.pgh.pa.us

If you run 6.5 pg_dump against a 7.0 database, or vice versa,
you get very obscure error messages:
parseNumericArray: too many numbers
getInherits(): SELECT failed. Explanation from backend: 'ERROR: Attribute 'inhrel' not found
(Quick, guess which is which ... you'll probably guess wrong.)

It's too late to do anything about the behavior of 6.5 pg_dump,
but we could change 7.0 and later pg_dump to check the database
version at startup and refuse to run if it's not the expected value.

A downside is that a pg_dump might refuse to dump a DB that it actually
would work with; that could be a pain in the neck, particularly in
development scenarios where you might not have kept the previous
compilation of pg_dump lying around. Yet I think I prefer that to the
risk of an insidious incompatibility that causes pg_dump to run without
complaint yet generate a bogus dump.

Comments anyone?

regards, tom lane

#2The Hermit Hacker
scrappy@hub.org
In reply to: Tom Lane (#1)
Re: Should pg_dump refuse to run if DB has different version?

On Mon, 3 Apr 2000, Tom Lane wrote:

If you run 6.5 pg_dump against a 7.0 database, or vice versa,
you get very obscure error messages:
parseNumericArray: too many numbers
getInherits(): SELECT failed. Explanation from backend: 'ERROR: Attribute 'inhrel' not found
(Quick, guess which is which ... you'll probably guess wrong.)

It's too late to do anything about the behavior of 6.5 pg_dump,
but we could change 7.0 and later pg_dump to check the database
version at startup and refuse to run if it's not the expected value.

A downside is that a pg_dump might refuse to dump a DB that it actually
would work with; that could be a pain in the neck, particularly in
development scenarios where you might not have kept the previous
compilation of pg_dump lying around. Yet I think I prefer that to the
risk of an insidious incompatibility that causes pg_dump to run without
complaint yet generate a bogus dump.

Comments anyone?

Sounds reasonable to me ...

#3Alfred Perlstein
bright@wintelcom.net
In reply to: Tom Lane (#1)
Re: Should pg_dump refuse to run if DB has different version?

* Tom Lane <tgl@sss.pgh.pa.us> [000403 12:18] wrote:

If you run 6.5 pg_dump against a 7.0 database, or vice versa,
you get very obscure error messages:
parseNumericArray: too many numbers
getInherits(): SELECT failed. Explanation from backend: 'ERROR: Attribute 'inhrel' not found
(Quick, guess which is which ... you'll probably guess wrong.)

It's too late to do anything about the behavior of 6.5 pg_dump,
but we could change 7.0 and later pg_dump to check the database
version at startup and refuse to run if it's not the expected value.

A downside is that a pg_dump might refuse to dump a DB that it actually
would work with; that could be a pain in the neck, particularly in
development scenarios where you might not have kept the previous
compilation of pg_dump lying around. Yet I think I prefer that to the
risk of an insidious incompatibility that causes pg_dump to run without
complaint yet generate a bogus dump.

Comments anyone?

It's a great idea and later down the road the versioning information
could be used to determine if it's actually possible to pg_dump
with a certain version, ie the pg_dump program can report its
version number to postgresql and postgresql can reply if it thinks
it's compatible with the version of pg_dump being used.

--
-Alfred Perlstein - [bright@wintelcom.net|alfred@freebsd.org]
"I have the heart of a child; I keep it in a jar on my desk."

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#1)
Re: Should pg_dump refuse to run if DB has different version?

Ed Loehr <eloehr@austin.rr.com> writes:

How about a pg_dump "force" option to run regardless of potential
incompatibilities?

Good idea --- done.

regards, tom lane

#5Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#4)
Re: Should pg_dump refuse to run if DB has different version?

Peter Eisentraut <e99re41@DoCS.UU.SE> writes:

A downside is that a pg_dump might refuse to dump a DB that it actually
would work with;

Well, the fact remains that 6.5 (and probably earlier) pg_dump doesn't
work with 7.0 databases unless you fix the getInherits() function to do
different things with different backends. Or what did you mean with "would
actually work"?

I was just speculating about possible future problems. Given the code
I committed last night, a 7.0 pg_dump will refuse to run with a 7.1
database (or vice versa, unless we change the version-checking code
before 7.1 is released). Now maybe that combination would have worked
anyway --- but we don't know yet.

I did put in a switch to override the version check, so if you know it
will work you can use that switch.

regards, tom lane