diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c
index b5f64e8d68e0ef9a7585c20be85804581148bfd5..0022d2d74ef9146112710e59d916d3a7aa15230b 100644
--- a/src/bin/pg_dump/pg_dumpall.c
+++ b/src/bin/pg_dump/pg_dumpall.c
@@ -804,11 +804,17 @@ dumpRoles(PGconn *conn)
 							 buf, "ROLE", rolename);
 
 		fprintf(OPF, "%s", buf->data);
-
-		if (server_version >= 70300)
-			dumpUserConfig(conn, rolename);
 	}
 
+	/*
+	 * Dump configuration settings for roles after all roles have been dumped.
+	 * We do it this way because config settings for roles could mention the
+	 * names of other roles.
+	 */
+	if (server_version >= 70300)
+		for (i = 0; i < PQntuples(res); i++)
+			dumpUserConfig(conn, PQgetvalue(res, i, i_rolname));
+
 	PQclear(res);
 
 	fprintf(OPF, "\n\n");