diff --git a/src/bin/pg_dump/Makefile.in b/src/bin/pg_dump/Makefile.in index 7aaa9a2f714d696ba3f5453e0c1d2ec4d4b8ade1..ca15402600365ecee1afa2c04d07beab3eb03bd1 100644 --- a/src/bin/pg_dump/Makefile.in +++ b/src/bin/pg_dump/Makefile.in @@ -7,7 +7,7 @@ # # # IDENTIFICATION -# $Header: /cvsroot/pgsql/src/bin/pg_dump/Attic/Makefile.in,v 1.9 1998/04/06 16:50:46 momjian Exp $ +# $Header: /cvsroot/pgsql/src/bin/pg_dump/Attic/Makefile.in,v 1.10 1998/08/30 05:06:53 momjian Exp $ # #------------------------------------------------------------------------- @@ -41,6 +41,7 @@ submake: install: pg_dump $(INSTALL) $(INSTL_EXE_OPTS) pg_dump $(BINDIR)/pg_dump $(INSTALL) $(INSTL_EXE_OPTS) pg_dumpall $(BINDIR)/pg_dumpall + $(INSTALL) $(INSTL_EXE_OPTS) pg_upgrade $(BINDIR)/pg_upgrade depend dep: $(CC) -MM $(CFLAGS) *.c >depend diff --git a/src/bin/pg_dump/pg_upgrade b/src/bin/pg_dump/pg_upgrade new file mode 100755 index 0000000000000000000000000000000000000000..d65af38f680777ea4aeb43181c7be52c73ed6629 --- /dev/null +++ b/src/bin/pg_dump/pg_upgrade @@ -0,0 +1,87 @@ +: +trap "rm -f /tmp/$$" 0 1 2 3 15 + +if [ "$#" -eq 0 ] +then echo "Usage: $0 [-f inputfile] database" 1>&2 + exit 1 +fi + +if [ "X$1" = "X-f" ] +then INPUT="$2" + shift 2 + if [ ! -f "$INPUT" ] + then echo "$INPUT does not exist" 1>&2 + exit 1 + fi +else INPUT="" +fi + +if [ "$#" -ne 1 ] +then echo "Usage: $0 [-f input_file] database" 1>&2 + exit 1 +fi + +DATABASE="$1" + +# check things + +if [ ! -f "./lib/global1.bki.source" ] +then echo "$0 must be run from the top of the postgres directory tree." 1>&2 + exit 1 +fi + +if [ ! -d "./data.upgrade" ] +then echo "You must rename your old /data directory to /data.upgrade and run initdb." 1>&2 + exit 1 +fi + +if [ ! -d "./data" ] +then echo "You must run initdb to create the template1 database." 1>&2 + exit 1 +fi + +if [ ! -d "./data/base/template1" ] +then echo "$0 must be run as the postgres superuser." 1>&2 + exit 1 +fi + +# do I need to create a database? + +if [ "$DATABASE" != "template1" ] +then destroydb "$DATABASE" + createdb "$DATABASE" +fi + +# remove COPY statements, preserve pgdump_oid setting from pg_dumpall + +cat $INPUT | awk ' { + if (toupper($0) ~ /^COPY / && + toupper($0) !~ /^COPY[ ]*PGDUMP_OID/ ) + while (getline $0 > 0 && $0 != "\\.") + ; + else print $0; + }' >/tmp/$$ + +#create empty tables/indexes + +psql "$DATABASE" <"/tmp/$$" +set -x + +for DIR in data/base/* +do + BASEDIR="`basename $DIR`" + if [ -d "$DIR" -a \ + -d "data.upgrade/$DIR" -a \ + \( "$DATABASE" = "$BASEDIR" -o "$DATABASE" = "template1" \) ] + then for FILE in data.upgrade/$DIR/* + do + BASEFILE="`basename $FILE`" + if [ `expr "$BASEFILE" : "pg_"` -ne 3 -a \ + "$BASEFILE" != "PG_VERSION" ] + then mv $FILE $DIR + fi + done + fi +done + +echo "You may removed the data.upgrade directory with 'rm -r data.upgrade'." diff --git a/src/man/pg_upgrade.1 b/src/man/pg_upgrade.1 new file mode 100644 index 0000000000000000000000000000000000000000..69c7603a4930812bd5cfb80a5acf20752f5df923 --- /dev/null +++ b/src/man/pg_upgrade.1 @@ -0,0 +1,56 @@ +.\" This is -*-nroff-*- +.\" XXX standard disclaimer belongs here.... +.\" $Header: /cvsroot/pgsql/src/man/Attic/pg_upgrade.1,v 1.1 1998/08/30 05:06:54 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] database +.SH DESCRIPTION +.IR "pg_upgrade" +is a utility for upgrading from a previous PostgreSQL release +without reloading all the data. +First, to be safe, back up your data directory. +Then, use: +.nf + + pg_dumpall -s -o >db.out + +.fi +to dump out your old database definitions without data, +while perserving the max system oid. +.PP +Then rename (using +.IR mv ) +your old pgsql /data directory to /data.upgrade and do a +.IR "make install" +to install the new binaries. +Then run +.IR initdb +to create a new +.IR template1 +database containing the system tables for the new release. +.IR cd +to the pgsql main directory, and type: +.nf + + pg_upgrade -f db.out template1 + +.fi +The system will do some checking to make sure everything is properly +configured, and run your +.IR db.out +script to create all the databases and tables you had, but with no data. +It will then move the data files from /data.upgrade into the proper +.IR /data +directory. +You can then start the +.IR postmaster +and check out the data. +You can delete the +.IR /data.upgrade +directory when you are finished. +.fi +.SH "SEE ALSO" +pg_dumpall(1).