Commit a62f43ae authored by Bruce Momjian's avatar Bruce Momjian

Fix problem with invalid database name assignment in while loop.

Properly warn of invalid pg_dumpall options;  minor quoting cleanups.
parent 5c1f31d2
...@@ -6,9 +6,9 @@ ...@@ -6,9 +6,9 @@
# and "pg_group" tables, which belong to the whole installation rather # and "pg_group" tables, which belong to the whole installation rather
# than any one individual database. # than any one individual database.
# #
# $Header: /cvsroot/pgsql/src/bin/pg_dump/Attic/pg_dumpall.sh,v 1.16 2002/02/24 21:57:23 tgl Exp $ # $Header: /cvsroot/pgsql/src/bin/pg_dump/Attic/pg_dumpall.sh,v 1.17 2002/04/11 04:56:21 momjian Exp $
CMDNAME=`basename $0` CMDNAME="`basename $0`"
# substituted at build # substituted at build
VERSION='@VERSION@' VERSION='@VERSION@'
...@@ -21,7 +21,7 @@ bindir='@bindir@' ...@@ -21,7 +21,7 @@ bindir='@bindir@'
PGPATH= PGPATH=
if echo "$0" | grep '/' > /dev/null 2>&1 ; then if echo "$0" | grep '/' > /dev/null 2>&1 ; then
# explicit dir name given # explicit dir name given
PGPATH=`echo $0 | sed 's,/[^/]*$,,'` # (dirname command is not portable) PGPATH=`echo "$0" | sed 's,/[^/]*$,,'` # (dirname command is not portable)
else else
# look for it in PATH ('which' command is not portable) # look for it in PATH ('which' command is not portable)
for dir in `echo "$PATH" | sed 's/:/ /g'` ; do for dir in `echo "$PATH" | sed 's/:/ /g'` ; do
...@@ -78,7 +78,7 @@ globals_only= ...@@ -78,7 +78,7 @@ globals_only=
while [ "$#" -gt 0 ] ; do while [ "$#" -gt 0 ] ; do
case $1 in case "$1" in
--help) --help)
usage=t usage=t
break break
...@@ -94,7 +94,7 @@ while [ "$#" -gt 0 ] ; do ...@@ -94,7 +94,7 @@ while [ "$#" -gt 0 ] ; do
connectopts="$connectopts $1" connectopts="$connectopts $1"
;; ;;
--host=*) --host=*)
connectopts="$connectopts -h "`echo $1 | sed 's/^--host=//'` connectopts="$connectopts -h `echo $1 | sed 's/^--host=//'`"
;; ;;
--port|-p) --port|-p)
connectopts="$connectopts -p $2" connectopts="$connectopts -p $2"
...@@ -103,7 +103,7 @@ while [ "$#" -gt 0 ] ; do ...@@ -103,7 +103,7 @@ while [ "$#" -gt 0 ] ; do
connectopts="$connectopts $1" connectopts="$connectopts $1"
;; ;;
--port=*) --port=*)
connectopts="$connectopts -p "`echo $1 | sed 's/^--port=//'` connectopts="$connectopts -p `echo $1 | sed 's/^--port=//'`"
;; ;;
--user|--username|-U) --user|--username|-U)
connectopts="$connectopts -U $2" connectopts="$connectopts -U $2"
...@@ -112,7 +112,7 @@ while [ "$#" -gt 0 ] ; do ...@@ -112,7 +112,7 @@ while [ "$#" -gt 0 ] ; do
connectopts="$connectopts $1" connectopts="$connectopts $1"
;; ;;
--user=*|--username=*) --user=*|--username=*)
connectopts="$connectopts -U "`echo $1 | sed 's/^--user[^=]*=//'` connectopts="$connectopts -U `echo $1 | sed 's/^--user[^=]*=//'`"
;; ;;
-W|--password) -W|--password)
connectopts="$connectopts -W" connectopts="$connectopts -W"
...@@ -125,6 +125,10 @@ while [ "$#" -gt 0 ] ; do ...@@ -125,6 +125,10 @@ while [ "$#" -gt 0 ] ; do
-g|--globals-only) -g|--globals-only)
globals_only=yes globals_only=yes
;; ;;
-F*|--format=*|-f|--file=*|-t|--table=*)
echo "pg_dump can not process option $1, exiting" 1>&2
exit 1
;;
*) *)
pgdumpextraopts="$pgdumpextraopts $1" pgdumpextraopts="$pgdumpextraopts $1"
;; ;;
...@@ -214,12 +218,9 @@ exec 4<&0 ...@@ -214,12 +218,9 @@ exec 4<&0
# We skip databases marked not datallowconn, since we'd be unable to # 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). # connect to them anyway (and besides, we don't want to dump template0).
DATABASES=""
$PSQL -d template1 -At -F ' ' \ $PSQL -d template1 -At -F ' ' \
-c "SELECT datname, coalesce(usename, (select usename from pg_shadow where usesysid=(select datdba from pg_database where datname='template0'))), pg_encoding_to_char(d.encoding), datistemplate, datpath FROM pg_database d LEFT JOIN pg_shadow u ON (datdba = usesysid) WHERE datallowconn ORDER BY 1;" | \ -c "SELECT datname, coalesce(usename, (select usename from pg_shadow where usesysid=(select datdba from pg_database where datname='template0'))), pg_encoding_to_char(d.encoding), datistemplate, datpath FROM pg_database d LEFT JOIN pg_shadow u ON (datdba = usesysid) WHERE datallowconn ORDER BY 1;" | \
while read DATABASE DBOWNER ENCODING ISTEMPLATE DBPATH; do while read DATABASE DBOWNER ENCODING ISTEMPLATE DBPATH; do
DATABASES="$DATABASES $DATABASE"
if [ "$DATABASE" != template1 ] ; then if [ "$DATABASE" != template1 ] ; then
echo echo
...@@ -242,7 +243,9 @@ while read DATABASE DBOWNER ENCODING ISTEMPLATE DBPATH; do ...@@ -242,7 +243,9 @@ while read DATABASE DBOWNER ENCODING ISTEMPLATE DBPATH; do
fi fi
done done
for DATABASE in $DATABASES; do $PSQL -d template1 -At -F ' ' \
-c "SELECT datname FROM pg_database WHERE datallowconn ORDER BY 1;" | \
while read DATABASE; do
echo "dumping database \"$DATABASE\"..." 1>&2 echo "dumping database \"$DATABASE\"..." 1>&2
echo echo
echo "--" echo "--"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment