Compatible Dumps

Started by Jake Strideabout 21 years ago5 messagesgeneral
Jump to latest
#1Jake Stride
nsuk@users.sourceforge.net

Is there a way to make a postgresql 8 database dump work with 7.4? I.E I
want to do a dump from 8.0 on one machine and put it into a database
running on 7.4 on another?

Thanks

Jake

#2Richard Huxton
dev@archonet.com
In reply to: Jake Stride (#1)
Re: Compatible Dumps

Jake Stride wrote:

Is there a way to make a postgresql 8 database dump work with 7.4? I.E I
want to do a dump from 8.0 on one machine and put it into a database
running on 7.4 on another?

Haven't tried this yet, but apart from turning off dollar-quoting for
functions, it should just work. If you want to test it, try a
schema-only dump+restore first.

--
Richard Huxton
Archonet Ltd

#3Jake Stride
nsuk@users.sourceforge.net
In reply to: Richard Huxton (#2)
Re: Compatible Dumps

Richard Huxton wrote:

Jake Stride wrote:

Is there a way to make a postgresql 8 database dump work with 7.4?
I.E I want to do a dump from 8.0 on one machine and put it into a
database running on 7.4 on another?

Haven't tried this yet, but apart from turning off dollar-quoting for
functions, it should just work. If you want to test it, try a
schema-only dump+restore first.

That helps a bit, but I still have the following issue:

ERROR: function pg_catalog.pg_get_serial_sequence("unknown", "unknown")
does not exist

Any ideas how to get around this?

Thanks

Jake

#4Richard Huxton
dev@archonet.com
In reply to: Jake Stride (#3)
Re: Compatible Dumps

Jake Stride wrote:

That helps a bit, but I still have the following issue:

ERROR: function pg_catalog.pg_get_serial_sequence("unknown", "unknown")
does not exist

Any ideas how to get around this?

Hmm - before 8.0 there wasn't an easy way to figure out the name of a
sequence attached to a column. This function is the easy way to do that,
but is (of course) not present in 7.x

Assuming your sequences all have default names, and are in the public
schema, you could write a simple function:

CREATE FUNCTION my_pg_get_serial_sequence(text,text) RETURNS text AS '
SELECT ''public.'' || $1 || ''_'' || $2 || ''_seq'';
' LANGUAGE SQL;

Then a quick bit of sed/perl search & replace-ing and you're away.

This *will* break if the target table (1st param) is in a different
schema than public, or if you have non-default sequence names.
--
Richard Huxton
Archonet Ltd

#5Bruce Momjian
bruce@momjian.us
In reply to: Richard Huxton (#4)
Re: Compatible Dumps

Richard Huxton <dev@archonet.com> writes:

This *will* break if the target table (1st param) is in a different schema than
public, or if you have non-default sequence names.

Including if you've renamed a serial column since creating it, or if your
serial column has an extremely long name.

In practice it works well enough though.

--
greg