Alvaro Herrera wrote:
> 2. decide that the standard is braindead and just omit dumping the
> grantor when it's no longer available, but don't remove
> pg_auth_members.grantor
>
> Which do people feel should be implemented? I can do whatever we
> decide; if no one has a strong opinion on the matter, my opinion is we
> do (2) which is the easiest.
Here is a patch implementing this idea, vaguely based on Russell's.
--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.
Index: src/bin/pg_dump/pg_dumpall.c
===================================================================
RCS file: /home/alvherre/cvs/pgsql/src/bin/pg_dump/pg_dumpall.c,v
retrieving revision 1.90
diff -c -p -r1.90 pg_dumpall.c
*** src/bin/pg_dump/pg_dumpall.c 10 Feb 2007 14:58:55 -0000 1.90
--- src/bin/pg_dump/pg_dumpall.c 14 May 2007 23:13:43 -0000
*************** dumpRoleMembership(PGconn *conn)
*** 702,709 ****
res = executeQuery(conn, "SELECT ur.rolname AS roleid, "
"um.rolname AS member, "
! "ug.rolname AS grantor, "
! "a.admin_option "
"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 "
--- 702,709 ----
res = executeQuery(conn, "SELECT ur.rolname AS roleid, "
"um.rolname AS member, "
! "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 "
*************** dumpRoleMembership(PGconn *conn)
*** 717,730 ****
{
char *roleid = PQgetvalue(res, i, 0);
char *member = PQgetvalue(res, i, 1);
! char *grantor = PQgetvalue(res, i, 2);
! char *option = PQgetvalue(res, i, 3);
fprintf(OPF, "GRANT %s", fmtId(roleid));
fprintf(OPF, " TO %s", fmtId(member));
if (*option == 't')
fprintf(OPF, " WITH ADMIN OPTION");
! fprintf(OPF, " GRANTED BY %s;\n", fmtId(grantor));
}
PQclear(res);
--- 717,740 ----
{
char *roleid = PQgetvalue(res, i, 0);
char *member = PQgetvalue(res, i, 1);
! char *option = PQgetvalue(res, i, 2);
fprintf(OPF, "GRANT %s", fmtId(roleid));
fprintf(OPF, " TO %s", fmtId(member));
if (*option == 't')
fprintf(OPF, " WITH ADMIN OPTION");
!
! /*
! * 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);
!
! fprintf(OPF, " GRANTED BY %s", fmtId(grantor));
! }
! fprintf(OPF, ";\n");
}
PQclear(res);
---------------------------(end of broadcast)---------------------------
TIP 7: You can help support the PostgreSQL project by donating at
http://www.postgresql.org/about/donate