diff --git a/src/bin/pg_dump/pg_dumpall b/src/bin/pg_dump/pg_dumpall
index 377b296e85027bf251b4ba8fb5484e979b21ba2c..d280b1ccd927ef098703c33fa4c7329111ae48cb 100644
--- a/src/bin/pg_dump/pg_dumpall
+++ b/src/bin/pg_dump/pg_dumpall
@@ -51,9 +51,15 @@ psql -A -q -t -c "select * from pg_database" template1 | grep '|' | tr '|' ' ' |
 grep -v '^template1 ' | \
 while read DATABASE DBUSERID ENCODING DATAPATH
 do
-	echo "${BS}connect template1 $DBUSERID"
+	DBUSERNAME="`echo \" \
+		select usename \
+		from pg_user \
+		where usesysid = $DBUSERID; \" | \
+		psql -A -q -t template1`"
 
-	if pg_encoding $ENCODING >/dev/null 2>&1
+	echo "${BS}connect template1 $DBUSERNAME"
+
+	if sh -c "pg_encoding $ENCODING" >/dev/null 2>&1
 	then
 		echo "create database $DATABASE with encoding='`pg_encoding $ENCODING`';"
 	else