mirror of
https://github.com/postgres/postgres.git
synced 2025-04-27 22:56:53 +03:00
Preserver pg_log and pg_variable in upgrade. Cleanups.
This commit is contained in:
parent
a753e5d192
commit
2913d6557e
@ -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'."
|
||||
|
@ -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).
|
||||
|
Loading…
x
Reference in New Issue
Block a user