]> granicus.if.org Git - postgresql/commitdiff
New pg_upgrade command.
authorBruce Momjian <bruce@momjian.us>
Sun, 30 Aug 1998 05:06:54 +0000 (05:06 +0000)
committerBruce Momjian <bruce@momjian.us>
Sun, 30 Aug 1998 05:06:54 +0000 (05:06 +0000)
src/bin/pg_dump/Makefile.in
src/bin/pg_dump/pg_upgrade [new file with mode: 0755]
src/man/pg_upgrade.1 [new file with mode: 0644]

index 7aaa9a2f714d696ba3f5453e0c1d2ec4d4b8ade1..ca15402600365ecee1afa2c04d07beab3eb03bd1 100644 (file)
@@ -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 (executable)
index 0000000..d65af38
--- /dev/null
@@ -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 (file)
index 0000000..69c7603
--- /dev/null
@@ -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).