aboutsummaryrefslogtreecommitdiff
path: root/src/bin/pg_dump/pg_dumpall.sh
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/pg_dump/pg_dumpall.sh')
-rw-r--r--src/bin/pg_dump/pg_dumpall.sh50
1 files changed, 20 insertions, 30 deletions
diff --git a/src/bin/pg_dump/pg_dumpall.sh b/src/bin/pg_dump/pg_dumpall.sh
index e16beb4a039..0429a9c3447 100644
--- a/src/bin/pg_dump/pg_dumpall.sh
+++ b/src/bin/pg_dump/pg_dumpall.sh
@@ -6,7 +6,7 @@
# and "pg_group" tables, which belong to the whole installation rather
# than any one individual database.
#
-# $Header: /cvsroot/pgsql/src/bin/pg_dump/Attic/pg_dumpall.sh,v 1.7 2000/11/08 18:23:44 petere Exp $
+# $Header: /cvsroot/pgsql/src/bin/pg_dump/Attic/pg_dumpall.sh,v 1.8 2000/11/14 18:37:46 tgl Exp $
CMDNAME=`basename $0`
@@ -151,7 +151,7 @@ echo "${BS}connect template1"
#
# Dump users (but not the user created by initdb)
#
-echo "DELETE FROM pg_shadow WHERE usesysid NOT IN (SELECT datdba FROM pg_database WHERE datname = 'template1');"
+echo "DELETE FROM pg_shadow WHERE usesysid <> (SELECT datdba FROM pg_database WHERE datname = 'template0');"
echo
$PSQL -d template1 -At <<__END__
@@ -163,7 +163,7 @@ SELECT
|| CASE WHEN valuntil IS NOT NULL THEN ' VALID UNTIL '''::text
|| CAST(valuntil AS TIMESTAMP) || '''' ELSE '' END || ';'
FROM pg_shadow
-WHERE usesysid <> (SELECT datdba FROM pg_database WHERE datname = 'template1');
+WHERE usesysid <> (SELECT datdba FROM pg_database WHERE datname = 'template0');
__END__
echo
@@ -187,46 +187,33 @@ done
test "$accounts_only" = yes && exit 0
-# First we dump the template in case there are local extensions.
-
-echo
-echo "--"
-echo "-- Database template1"
-echo "--"
-echo "${BS}connect template1"
-$PGDUMP "template1"
-if [ "$?" -ne 0 ] ; then
- echo "pg_dump failed on template1, exiting" 1>&2
- exit 1
-fi
-
-
# For each database, run pg_dump to dump the contents of that database.
+# We skip databases marked not datallowconn, since we'd be unable to
+# connect to them anyway (and besides, we don't want to dump template0).
$PSQL -d template1 -At -F ' ' \
- -c "SELECT d.datname, u.usename, pg_encoding_to_char(d.encoding), d.datpath FROM pg_database d, pg_shadow u WHERE d.datdba = u.usesysid AND datname <> 'template1';" | \
-while read DATABASE DBOWNER ENCODING DBPATH; do
+ -c "SELECT datname, usename, pg_encoding_to_char(d.encoding), datistemplate, datpath FROM pg_database d LEFT JOIN pg_shadow u ON (datdba = usesysid) WHERE datallowconn;" | \
+while read DATABASE DBOWNER ENCODING ISTEMPLATE DBPATH; do
echo
echo "--"
echo "-- Database $DATABASE"
echo "--"
echo "${BS}connect template1 $DBOWNER"
- if [ "$cleanschema" = yes ] ; then
+ if [ "$cleanschema" = yes -a "$DATABASE" != template1 ] ; then
echo "DROP DATABASE \"$DATABASE\";"
fi
- createdbcmd="CREATE DATABASE \"$DATABASE\""
- if [ x"$DBPATH" != x"" ] || [ x"$MULTIBYTE" != x"" ]; then
- createdbcmd="$createdbcmd WITH"
- fi
- if [ x"$DBPATH" != x"" ] ; then
- createdbcmd="$createdbcmd LOCATION = '$DBPATH'"
+ if [ "$DATABASE" != template1 ] ; then
+ createdbcmd="CREATE DATABASE \"$DATABASE\" WITH TEMPLATE = template0"
+ if [ x"$DBPATH" != x"" ] ; then
+ createdbcmd="$createdbcmd LOCATION = '$DBPATH'"
+ fi
+ if [ x"$MULTIBYTE" != x"" ] ; then
+ createdbcmd="$createdbcmd ENCODING = '$ENCODING'"
+ fi
+ echo "$createdbcmd;"
fi
- if [ x"$MULTIBYTE" != x"" ] ; then
- createdbcmd="$createdbcmd ENCODING = '$ENCODING'"
- fi
- echo "$createdbcmd;"
echo "${BS}connect $DATABASE $DBOWNER"
$PGDUMP "$DATABASE"
@@ -234,6 +221,9 @@ while read DATABASE DBOWNER ENCODING DBPATH; do
echo "pg_dump failed on $DATABASE, exiting" 1>&2
exit 1
fi
+ if [ x"$ISTEMPLATE" = xt ] ; then
+ echo "UPDATE pg_database SET datistemplate = 't' WHERE datname = '$DATABASE';"
+ fi
done
exit 0