diff --git a/src/bin/pg_dump/pg_upgrade b/src/bin/pg_dump/pg_upgrade index 06cf8e3411..f9f062520a 100755 --- a/src/bin/pg_dump/pg_upgrade +++ b/src/bin/pg_dump/pg_upgrade @@ -2,7 +2,7 @@ trap "rm -f /tmp/$$" 0 1 2 3 15 if [ "$#" -eq 0 ] -then echo "Usage: $0 [-f inputfile] old_data_dir database" 1>&2 +then echo "Usage: $0 [-f inputfile] old_data_dir" 1>&2 exit 1 fi @@ -16,13 +16,12 @@ then INPUT="$2" else INPUT="" fi -if [ "$#" -ne 2 ] -then echo "Usage: $0 [-f input_file] old_data_dir database" 1>&2 +if [ "$#" -ne 1 ] +then echo "Usage: $0 [-f inputfile] old_data_dir" 1>&2 exit 1 fi OLDDIR="$1" -DATABASE="$2" # check things @@ -36,8 +35,8 @@ then echo "You must rename your old /data directory to /$OLDDIR and run initdb." exit 1 fi -if [ ! -d "./$OLDDIR/data/base/$DATABASE" ] -then echo "There is not database $DATABASE in ./$OLDDIR/data/base." 1>&2 +if [ ! -d "./$OLDDIR/base/template1" ] +then echo "There is not database template1 in ./$OLDDIR/base." 1>&2 exit 1 fi @@ -53,17 +52,12 @@ fi # do I need to create a database? -if [ "$DATABASE" != "template1" ] -then echo "Dropping and recreating database $DATABASE." 1>&2 - destroydb "$DATABASE" >/dev/null 2>&1 - createdb "$DATABASE" -fi - -# remove any COPY statements, preserve pgdump_oid setting from pg_dumpall +# remove any COPY statements +# we don't even need pgdump_oid because we are moving pg_variable +# then shouldn't be in there anyway cat $INPUT | awk ' { - if (toupper($0) ~ /^COPY / && - toupper($0) !~ /^COPY[ ]*PGDUMP_OID/ ) + if (toupper($0) ~ /^COPY /) while (getline $0 > 0 && $0 != "\\.") ; else print $0; @@ -71,16 +65,14 @@ cat $INPUT | awk ' { #create empty tables/indexes -psql "$DATABASE" <"/tmp/$$" -set -x +psql "template1" <"/tmp/$$" for DIR in data/base/* do BASEDIR="`basename $DIR`" if [ -d "$DIR" -a \ - -d "$OLDDIR/$DIR" -a \ - \( "$DATABASE" = "$BASEDIR" -o "$DATABASE" = "template1" \) ] - then for FILE in $OLDDIR/$DIR/* + -d "$OLDDIR/base/$BASEDIR" -a \( "$BASEDIR" != "template1" \) ] + then for FILE in $OLDDIR/base/$BASEDIR/* do BASEFILE="`basename $FILE`" if [ `expr "$BASEFILE" : "pg_"` -ne 3 -a \ @@ -91,4 +83,7 @@ do fi done +mv $OLDDIR/pg_log data +mv $OLDDIR/pg_variable data + echo "You may removed the $OLDDIR directory with 'rm -r $OLDDIR'." diff --git a/src/man/pg_upgrade.1 b/src/man/pg_upgrade.1 index e249e11747..75c48d096d 100644 --- a/src/man/pg_upgrade.1 +++ b/src/man/pg_upgrade.1 @@ -1,12 +1,12 @@ .\" This is -*-nroff-*- .\" XXX standard disclaimer belongs here.... -.\" $Header: /cvsroot/pgsql/src/man/Attic/pg_upgrade.1,v 1.3 1998/08/30 13:14:00 momjian Exp $ +.\" $Header: /cvsroot/pgsql/src/man/Attic/pg_upgrade.1,v 1.4 1998/08/31 04:32:18 momjian Exp $ .TH pg_upgrade UNIX 1/20/96 PostgreSQL PostgreSQL .SH NAME pg_upgrade - allows upgrade from a previous release without reloading data .SH SYNOPSIS .BR pg_upgrade -[-f input_file] old_data_dir database +[-f input_file] old_data_dir .SH DESCRIPTION .IR "pg_upgrade" is a utility for upgrading from a previous PostgreSQL release @@ -15,27 +15,28 @@ First, to be safe, back up your data directory. Then, use: .nf - pg_dumpall -s -o >db.out + pg_dumpall -s >db.out .fi -to dump out your old database definitions without data, -while perserving the max system oid. +to dump out your old database definitions without any data. +Stop the postmaster and all backends. .PP Then rename (using .IR mv ) your old pgsql /data directory to /data.old and do a .IR "make install" to install the new binaries. -Then run +Run .IR initdb to create a new .IR template1 database containing the system tables for the new release. +Start the new postmaster, .IR cd to the pgsql main directory, and type: .nf - pg_upgrade -f db.out data.old template1 + pg_upgrade -f db.out data.old .fi The system will do some checking to make sure everything is properly @@ -45,13 +46,9 @@ script to create all the databases and tables you had, but with no data. It will then move the data files from /data.old into the proper .IR /data directory. -You can then start the -.IR postmaster -and check out the data. +You can then check out the data. You can delete the .IR /data.old directory when you are finished. -.PP -It can also be used for individual databases. .SH "SEE ALSO" pg_dumpall(1).