Dump all roles first, then all config settings on roles.
authorRobert Haas <rhaas@postgresql.org>
Fri, 14 Oct 2011 18:16:02 +0000 (14:16 -0400)
committerRobert Haas <rhaas@postgresql.org>
Fri, 14 Oct 2011 18:16:02 +0000 (14:16 -0400)
This way, if a role's config setting uses the name of another role,
the validity of the dump isn't dependent on the order in which those
two roles are dumped.

Code by Phil Sorber, comment by me.

src/bin/pg_dump/pg_dumpall.c

index b5f64e8d68e0ef9a7585c20be85804581148bfd5..0022d2d74ef9146112710e59d916d3a7aa15230b 100644 (file)
@@ -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");