Preserver pg_log and pg_variable in upgrade. Cleanups.

This commit is contained in:
Bruce Momjian 1998-08-31 04:32:18 +00:00
parent a753e5d192
commit 2913d6557e
2 changed files with 24 additions and 32 deletions

View File

@ -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'."

View File

@ -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).