Fix problem with invalid database name assignment in while loop.

Properly warn of invalid pg_dumpall options;  minor quoting cleanups.
This commit is contained in:
Bruce Momjian 2002-04-11 04:56:21 +00:00
parent 5c1f31d2d4
commit a62f43ae6e
1 changed files with 14 additions and 11 deletions

View File

@ -6,9 +6,9 @@
# 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.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
VERSION='@VERSION@'
@ -21,7 +21,7 @@ bindir='@bindir@'
PGPATH=
if echo "$0" | grep '/' > /dev/null 2>&1 ; then
# 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
# look for it in PATH ('which' command is not portable)
for dir in `echo "$PATH" | sed 's/:/ /g'` ; do
@ -78,7 +78,7 @@ globals_only=
while [ "$#" -gt 0 ] ; do
case $1 in
case "$1" in
--help)
usage=t
break
@ -94,7 +94,7 @@ while [ "$#" -gt 0 ] ; do
connectopts="$connectopts $1"
;;
--host=*)
connectopts="$connectopts -h "`echo $1 | sed 's/^--host=//'`
connectopts="$connectopts -h `echo $1 | sed 's/^--host=//'`"
;;
--port|-p)
connectopts="$connectopts -p $2"
@ -103,7 +103,7 @@ while [ "$#" -gt 0 ] ; do
connectopts="$connectopts $1"
;;
--port=*)
connectopts="$connectopts -p "`echo $1 | sed 's/^--port=//'`
connectopts="$connectopts -p `echo $1 | sed 's/^--port=//'`"
;;
--user|--username|-U)
connectopts="$connectopts -U $2"
@ -112,7 +112,7 @@ while [ "$#" -gt 0 ] ; do
connectopts="$connectopts $1"
;;
--user=*|--username=*)
connectopts="$connectopts -U "`echo $1 | sed 's/^--user[^=]*=//'`
connectopts="$connectopts -U `echo $1 | sed 's/^--user[^=]*=//'`"
;;
-W|--password)
connectopts="$connectopts -W"
@ -125,6 +125,10 @@ while [ "$#" -gt 0 ] ; do
-g|--globals-only)
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"
;;
@ -214,12 +218,9 @@ exec 4<&0
# 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).
DATABASES=""
$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;" | \
while read DATABASE DBOWNER ENCODING ISTEMPLATE DBPATH; do
DATABASES="$DATABASES $DATABASE"
if [ "$DATABASE" != template1 ] ; then
echo
@ -242,7 +243,9 @@ while read DATABASE DBOWNER ENCODING ISTEMPLATE DBPATH; do
fi
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
echo "--"