#!/bin/sh ## ## pg_migrate -- PostgreSQL Database Migration Utility ## Copyright (c) 2000-2003 The OpenPKG Project ## Copyright (c) 2000-2003 Ralf S. Engelschall ## Copyright (c) 2000-2003 Cable & Wireless ## ## 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@" l_pguser="@l_pguser@" l_pgpass="@l_pgpass@" # establish sane environment LC_CTYPE=C export LC_CTYPE umask 022 # check command line if [ $# -ne 1 ]; then echo "$0:ERROR: invalid command line" 1>&2 echo "$0:USAGE: $0 dump|restore" 1>&2 exit 1 fi # dispatch into commands cmd="$1" shift 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 trust" echo "host all 127.0.0.1 255.255.255.255 trust" ) >$l_prefix/var/postgresql/db/pg_hba.conf if [ ".`$l_prefix/etc/rc postgresql status 2>&1 | grep 'is running'`" != . ]; then echo "++ reloading already running database engine" $l_prefix/etc/rc postgresql reload sleep 2 epilog=reload else echo "++ temporarily starting database engine" $l_prefix/etc/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/etc/rc postgresql reload sleep 2 else echo "++ stopping temporarily started database engine" $l_prefix/etc/rc postgresql stop sleep 4 fi ;; restore ) if [ ".`$l_prefix/etc/rc postgresql status 2>&1 | grep 'is running'`" != . ]; then echo "++ stopping already running database engine" $l_prefix/etc/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_pguser; echo $l_pgpass) |\ $l_prefix/bin/pg_initdb -U $l_pguser -W -D $l_prefix/var/postgresql/db" 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 trust" echo "host all 127.0.0.1 255.255.255.255 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/etc/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 template1 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/etc/rc postgresql reload sleep 2 else echo "++ stopping temporarily started database engine" $l_prefix/etc/rc postgresql stop sleep 4 fi ;; * ) echo "$0:ERROR: unknown command \"$cmd\"" 1>&2 exit 1 ;; esac