From: Alvaro Herrera Date: Tue, 15 May 2007 20:20:29 +0000 (+0000) Subject: Avoid emitting empty role names in the GRANTED BY clause of GRANT ROLE X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=cdb1ff0abbf8a490d1c821fe177cc07380ca689a;p=users%2Fbernd%2Fpostgres.git Avoid emitting empty role names in the GRANTED BY clause of GRANT ROLE when the grantor has been dropped. This is a workaround for the fact that we don't track the grantor as a shared dependency. --- diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c index e0af5755d3..91f9ec23df 100644 --- a/src/bin/pg_dump/pg_dumpall.c +++ b/src/bin/pg_dump/pg_dumpall.c @@ -555,8 +555,8 @@ dumpRoleMembership(PGconn *conn) res = executeQuery(conn, "SELECT ur.rolname AS roleid, " "um.rolname AS member, " - "ug.rolname AS grantor, " - "a.admin_option " + "a.admin_option, " + "ug.rolname AS grantor " "FROM pg_auth_members a " "LEFT JOIN pg_authid ur on ur.oid = a.roleid " "LEFT JOIN pg_authid um on um.oid = a.member " @@ -570,14 +570,24 @@ dumpRoleMembership(PGconn *conn) { char *roleid = PQgetvalue(res, i, 0); char *member = PQgetvalue(res, i, 1); - char *grantor = PQgetvalue(res, i, 2); - char *option = PQgetvalue(res, i, 3); + char *option = PQgetvalue(res, i, 2); printf("GRANT %s", fmtId(roleid)); printf(" TO %s", fmtId(member)); if (*option == 't') printf(" WITH ADMIN OPTION"); - printf(" GRANTED BY %s;\n", fmtId(grantor)); + + /* + * We don't track the grantor very carefully in the backend, so cope + * with the possibility that it has been dropped. + */ + if (!PQgetisnull(res, i, 3)) + { + char *grantor = PQgetvalue(res, i, 3); + + printf(" GRANTED BY %s", fmtId(grantor)); + } + printf(";\n"); } PQclear(res);