Skip to content
Snippets Groups Projects
Commit a62f43ae authored by Bruce Momjian's avatar Bruce Momjian
Browse files

Fix problem with invalid database name assignment in while loop.

Properly warn of invalid pg_dumpall options;  minor quoting cleanups.
parent 5c1f31d2
No related branches found
No related tags found
No related merge requests found
...@@ -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 "--"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment