|
|
@@ -0,0 +1,187 @@
|
|
|
+#!/bin/sh
|
|
|
+##
|
|
|
+## pg_migrate -- PostgreSQL Database Migration Utility
|
|
|
+## Copyright (c) 2000-2002 Cable & Wireless Deutschland GmbH
|
|
|
+## Copyright (c) 2000-2002 The OpenPKG Project <http://www.openpkg.org/>
|
|
|
+## Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
|
|
|
+##
|
|
|
+## 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@"
|
|
|
+
|
|
|
+# establish sane environment
|
|
|
+LC_CTYPE=C
|
|
|
+export LC_CTYPE
|
|
|
+umask 022
|
|
|
+
|
|
|
+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"
|
|
|
+ $l_prefix/bin/pg_dumpall \
|
|
|
+ -U postgresql -Spostgresql -o -Xuse-set-session-authorization |\
|
|
|
+ $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 'postgresql'; echo 'postgresql') |\
|
|
|
+ $l_prefix/bin/pg_initdb -U postgresql -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 postgresql -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
|
|
|
+ ;;
|
|
|
+esac
|
|
|
+
|