diff -r 33c0b135173e -r 382048971a24 postgresql/pg_migrate
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/postgresql/pg_migrate Mon Nov 22 16:54:26 2010 +0100
@@ -0,0 +1,220 @@
+#!/bin/sh
+##
+## pg_migrate -- PostgreSQL Database Migration Utility
+## Copyright (c) 2000-2007 OpenPKG Foundation e.V.
+## Copyright (c) 2000-2007 Ralf S. Engelschall
+##
+## Permission to use, copy, modify, and distribute this software for
+## any purpose with or without fee is hereby granted, provided that
+## the above copyright notice and this permission notice appear in all
+## copies.
+##
+## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
+## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+## SUCH DAMAGE.
+##
+
+# configuration
+l_prefix="@l_prefix@"
+l_rusr="@l_rusr@"
+l_rgrp="@l_rgrp@"
+
+# load superuser information
+l_pgdata=""
+l_pguser=""
+l_pgpass=""
+if [ ! -r $l_prefix/var/postgresql/db/pg_superuser.conf ]; then
+ echo "$0:ERROR: unable to read file \"$l_prefix/var/postgresql/db/pg_superuser.conf\" (use pg_passwd(1) to create)" 1>&2
+ exit 1
+fi
+eval `. $l_prefix/var/postgresql/db/pg_superuser.conf; \
+ echo l_pgdata=\"$superuser_database\"; \
+ echo l_pguser=\"$superuser_username\"; \
+ echo l_pgpass=\"$superuser_password\"`
+
+# establish sane environment
+LC_CTYPE=C
+export LC_CTYPE
+umask 022
+
+# check command line
+if [ $# -ne 1 -a $# -ne 2 ]; then
+ echo "$0:ERROR: invalid command line" 1>&2
+ echo "$0:USAGE: $0 dump|restore []" 1>&2
+ exit 1
+fi
+cmd="$1"; shift
+if [ $# -eq 1 ]; then
+ l_pgpass="$1"; shift
+fi
+
+# dispatch into commands
+case $cmd in
+ dump )
+ echo "++ enforcing full-superuser access policy"
+ cp -p $l_prefix/var/postgresql/db/pg_hba.conf \
+ $l_prefix/var/postgresql/db/pg_hba.conf.orig
+ ( echo "local all all trust"
+ echo "host all all 127.0.0.1/32 trust"
+ ) >$l_prefix/var/postgresql/db/pg_hba.conf
+
+ ( eval `${l_prefix}/bin/openpkg rc postgresql status 2>/dev/null`
+ echo "postgresql_active=\"$postgresql_active\""
+ ) 2>/dev/null
+ if [ ".$postgresql_active" = .yes ]; then
+ echo "++ reloading already running database engine"
+ $l_prefix/bin/openpkg rc postgresql reload
+ sleep 2
+ epilog=reload
+ else
+ echo "++ temporarily starting database engine"
+ $l_prefix/bin/openpkg rc postgresql start
+ sleep 4
+ epilog=stop
+ fi
+
+ echo "++ rotating dump files $l_prefix/var/postgresql/db.dump*.sql.bz2"
+ i=9
+ rm -f $l_prefix/var/postgresql/db.dump.$i.sql.bz2 >/dev/null 2>&1 || true
+ while [ $i -gt 0 ]; do
+ j=$i
+ i=`expr $i - 1`
+ if [ $i -eq 0 ]; then
+ prev="$l_prefix/var/postgresql/db.dump.sql.bz2"
+ next="$l_prefix/var/postgresql/db.dump.$j.sql.bz2"
+ else
+ prev="$l_prefix/var/postgresql/db.dump.$i.sql.bz2"
+ next="$l_prefix/var/postgresql/db.dump.$j.sql.bz2"
+ fi
+ if [ -f $prev ]; then
+ mv $prev $next
+ fi
+ done
+
+ echo "++ dumping all databases into $l_prefix/var/postgresql/db.dump.sql.bz2"
+ PGPASSWORD="$l_pgpass" \
+ $l_prefix/bin/pg_dumpall \
+ -U "$l_pguser" -o |\
+ $l_prefix/lib/openpkg/bzip2 -9 \
+ >$l_prefix/var/postgresql/db.dump.sql.bz2
+ chown ${l_rusr}:${l_rgrp} $l_prefix/var/postgresql/db.dump.sql.bz2
+ chmod 700 $l_prefix/var/postgresql/db.dump.sql.bz2
+
+ echo "++ restoring original access policy"
+ cp -p $l_prefix/var/postgresql/db/pg_hba.conf.orig \
+ $l_prefix/var/postgresql/db/pg_hba.conf
+ rm -f $l_prefix/var/postgresql/db/pg_hba.conf.orig
+
+ if [ ".$epilog" = .reload ]; then
+ echo "++ reloading already running database engine (again)"
+ $l_prefix/bin/openpkg rc postgresql reload
+ sleep 2
+ else
+ echo "++ stopping temporarily started database engine"
+ $l_prefix/bin/openpkg rc postgresql stop
+ sleep 4
+ fi
+ ;;
+
+ restore )
+ if [ ".`$l_prefix/bin/openpkg rc postgresql status 2>&1 | grep 'is running'`" != . ]; then
+ echo "++ stopping already running database engine"
+ $l_prefix/bin/openpkg rc postgresql stop
+ sleep 2
+ epilog=start
+ else
+ epilog=none
+ fi
+
+ echo "++ rotating database directories $l_prefix/var/postgresql/db.old*/"
+ i=9
+ rm -rf $l_prefix/var/postgresql/db.old.$i >/dev/null 2>&1 || true
+ while [ $i -gt 0 ]; do
+ j=$i
+ i=`expr $i - 1`
+ if [ $i -eq 0 ]; then
+ prev="$l_prefix/var/postgresql/db"
+ next="$l_prefix/var/postgresql/db.old.$j"
+ else
+ prev="$l_prefix/var/postgresql/db.old.$i"
+ next="$l_prefix/var/postgresql/db.old.$j"
+ fi
+ if [ -d $prev ]; then
+ mv $prev $next
+ fi
+ done
+
+ echo "++ creating new database directory $l_prefix/var/postgresql/db/"
+ mkdir $l_prefix/var/postgresql/db
+ chown ${l_rusr}:${l_rgrp} $l_prefix/var/postgresql/db
+ chmod 700 $l_prefix/var/postgresql/db
+
+ su - ${l_rusr} -c \
+ "LC_CTYPE=C; export LC_CTYPE; umask 022; \
+ echo $l_pgpass >$l_prefix/var/postgresql/run/pw; \
+ $l_prefix/bin/pg_initdb \
+ -U $l_pguser --pwfile=$l_prefix/var/postgresql/run/pw \
+ -D $l_prefix/var/postgresql/db; \
+ rm -f $l_prefix/var/postgresql/run/pw" 2>&1 |\
+ $l_prefix/lib/openpkg/shtool prop \
+ -p "++ creating new database data"
+
+ echo "++ restoring database configurations"
+ for conf in pg_hba.conf pg_ident.conf postgresql.conf; do
+ cp -p $l_prefix/var/postgresql/db.old.1/$conf \
+ $l_prefix/var/postgresql/db/
+ done
+
+ echo "++ enforcing full-superuser access policy"
+ cp -p $l_prefix/var/postgresql/db/pg_hba.conf \
+ $l_prefix/var/postgresql/db/pg_hba.conf.orig
+ ( echo "local all all trust"
+ echo "host all all 127.0.0.1/32 trust"
+ ) >$l_prefix/var/postgresql/db/pg_hba.conf
+
+ if [ ".$epilog" = .start ]; then
+ echo "++ starting database engine"
+ else
+ echo "++ temporarily starting database engine"
+ fi
+ $l_prefix/bin/openpkg rc postgresql start
+ sleep 4
+
+ echo "++ restoring all databases from $l_prefix/var/postgresql/db.dump.sql.bz2"
+ $l_prefix/lib/openpkg/bzip2 -c -d \
+ $l_prefix/var/postgresql/db.dump.sql.bz2 |\
+ $l_prefix/bin/psql -U "$l_pguser" -d "$l_pgdata" 2>&1 |\
+ tee $l_prefix/var/postgresql/db.log |\
+ $l_prefix/lib/openpkg/shtool prop \
+ -p "++ restoring data (see $l_prefix/var/postgresql/db.log)"
+
+ echo "++ restoring original access policy"
+ cp -p $l_prefix/var/postgresql/db/pg_hba.conf.orig \
+ $l_prefix/var/postgresql/db/pg_hba.conf
+ rm -f $l_prefix/var/postgresql/db/pg_hba.conf.orig
+
+ if [ ".$epilog" = .start ]; then
+ echo "++ reloading already running database engine"
+ $l_prefix/bin/openpkg rc postgresql reload
+ sleep 2
+ else
+ echo "++ stopping temporarily started database engine"
+ $l_prefix/bin/openpkg rc postgresql stop
+ sleep 4
+ fi
+ ;;
+ * )
+ echo "$0:ERROR: unknown command \"$cmd\"" 1>&2
+ exit 1
+ ;;
+esac
+