Thanks for the comment.

At Tue, 23 Aug 2022 09:58:47 -0400, Robert Haas <robertmh...@gmail.com> wrote 
in 
> On Mon, Aug 22, 2022 at 9:29 PM Kyotaro Horiguchi
> <horikyota....@gmail.com> wrote:
> In the case of GRANT, that's more ambiguous, because the word OPTION
> actually appears in the syntax. But isn't that sort of accidental?

Yeah I think so.  My intension is to let the translators do their work
more mechanically.  A capital-letter word is automatically recognized
as a keyword then can be copied as-is.

I would translate "ADMIN OPTION" to "ADMIN OPTION" in Japanese but
"admin option" is translated to "管理者オプション" which is a bit hard
for the readers to come up with the connection to "ADMIN OPTION" (or
ADMIN <roles>). I guess this is somewhat simliar to use "You need to
give capability to administrate the role" to suggest users to add WITH
ADMIN OPTION to the role.

Maybe Álvaro has a similar difficulty on it.

> It's quite possible to give someone the right to administer a role
> without ever mentioning the OPTION keyword:

Mmm.. Fair point.

> In short, I'm wondering whether we should regard ADMIN as the name of
> the option, but OPTION as part of the GRANT syntax, and hence
> capitalize it "ADMIN option". However, if the non-English speakers on
> this list have a strong preference for something else I'm certainly
> not going to fight about it.

"ADMIN option" which is translated into "ADMINオプション" is fine by
me.  I hope Álvaro thinks the same way.

What do you think about the attached?


> > In passing, I met the following code in the same file.
> >
> > >               if (!have_createrole_privilege() &&
> > >                       !is_admin_of_role(currentUserId, roleid))
> > >                       ereport(ERROR,
> > >                                       
> > > (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
> > >                                        errmsg("must have admin option on 
> > > role \"%s\"",
> > >                                                       rolename)));
> >
> > The message seems a bit short that it only mentions admin option while
> > omitting CREATEROLE privilege. "must have CREATEROLE privilege or
> > admin option on role %s" might be better.  Or we could say just
> > "insufficient privilege" or "permission denied" in the main error
> > message then provide "CREATEROLE privilege or admin option on role %s
> > is required" in DETAILS or HINTS message.  The message was added by
> > c33d575899 along with the have_createrole_privilege() call so it is
> > unclear to me whether it is intentional or not.
> 
> Yeah, I wasn't sure what to do about this. We do not mention superuser
> privileges in every message where they theoretically apply, because it
> would make a lot of messages longer for not much benefit. CREATEROLE
> is a similar case and I think, but am not sure, that we treat it
> similarly. So in my mind it is a judgement call what to do here, and
> if other people think that what I picked wasn't best, we can change
> it.
> 
> For what it's worth, I'm hoping to eventually remove the CREATEROLE
> exception here. The superuser exception will remain, of course.

If it were simply "permission denied", I don't think about the details
then seek for the way to allow that. But I don't mean to fight this
for now.

For the record, I would prefer the follwoing message for this sort of
failure.

ERROR:  permission denied
DETAILS: CREATEROLE or ADMIN option is required for the role.

regards.

-- 
Kyotaro Horiguchi
NTT Open Source Software Center
diff --git a/doc/src/sgml/information_schema.sgml b/doc/src/sgml/information_schema.sgml
index 350c75bc31..5f661552d8 100644
--- a/doc/src/sgml/information_schema.sgml
+++ b/doc/src/sgml/information_schema.sgml
@@ -183,8 +183,8 @@
 
   <para>
    The view <literal>administrable_role_authorizations</literal>
-   identifies all roles that the current user has the admin option
-   for.
+   identifies all roles that the current user has the <literal>ADMIN</literal>
+   option for.
   </para>
 
   <table>
diff --git a/doc/src/sgml/ref/alter_group.sgml b/doc/src/sgml/ref/alter_group.sgml
index b9e641818c..4b528498df 100644
--- a/doc/src/sgml/ref/alter_group.sgml
+++ b/doc/src/sgml/ref/alter_group.sgml
@@ -55,7 +55,7 @@ ALTER GROUP <replaceable class="parameter">group_name</replaceable> RENAME TO <r
    <link linkend="sql-revoke"><command>REVOKE</command></link>. Note that
    <command>GRANT</command> and <command>REVOKE</command> have additional
    options which are not available with this command, such as the ability
-   to grant and revoke <literal>ADMIN OPTION</literal>, and the ability to
+   to grant and revoke <literal>ADMIN</literal> option, and the ability to
    specify the grantor.
   </para>
 
diff --git a/doc/src/sgml/ref/createuser.sgml b/doc/src/sgml/ref/createuser.sgml
index c6a7c603f7..22cd885c82 100644
--- a/doc/src/sgml/ref/createuser.sgml
+++ b/doc/src/sgml/ref/createuser.sgml
@@ -82,7 +82,8 @@ PostgreSQL documentation
       <listitem>
        <para>
         Indicates role that will be immediately added as a member of the new
-        role with admin option, giving it the right to grant membership in the
+        role with <literal>ADMIN</literal> option, giving it the right to
+        grant membership in the
         new role to others.  Multiple roles to add as members (with admin
         option) of the new role can be specified by writing multiple
         <option>-a</option> switches.
diff --git a/doc/src/sgml/ref/grant.sgml b/doc/src/sgml/ref/grant.sgml
index 2fd0f34d55..8f0c572051 100644
--- a/doc/src/sgml/ref/grant.sgml
+++ b/doc/src/sgml/ref/grant.sgml
@@ -257,10 +257,10 @@ GRANT <replaceable class="parameter">role_name</replaceable> [, ...] TO <replace
   <para>
    If <literal>WITH ADMIN OPTION</literal> is specified, the member can
    in turn grant membership in the role to others, and revoke membership
-   in the role as well.  Without the admin option, ordinary users cannot
-   do that.  A role is not considered to hold <literal>WITH ADMIN
-   OPTION</literal> on itself.  Database superusers can grant or revoke
-   membership in any role to anyone.  Roles having
+   in the role as well.  Without the <literal>ADMIN</literal> option, ordinary
+   users cannot do that.  A role is not considered to hold
+   the <literal>ADMIN</literal> option on itself.  Database superusers can
+   grant or revoke membership in any role to anyone.  Roles having
    <literal>CREATEROLE</literal> privilege can grant or revoke membership
    in any role that is not a superuser.
   </para>
@@ -269,11 +269,11 @@ GRANT <replaceable class="parameter">role_name</replaceable> [, ...] TO <replace
    If <literal>GRANTED BY</literal> is specified, the grant is recorded as
    having been done by the specified role. A user can only attribute a grant
    to another role if they possess the privileges of that role. The role
-   recorded as the grantor must have <literal>ADMIN OPTION</literal> on the
+   recorded as the grantor must have <literal>ADMIN</literal> option on the
    target role, unless it is the bootstrap superuser. When a grant is recorded
    as having a grantor other than the bootstrap superuser, it depends on the
-   grantor continuing to posess <literal>ADMIN OPTION</literal> on the role;
-   so, if <literal>ADMIN OPTION</literal> is revoked, dependent grants must
+   grantor continuing to posess <literal>ADMIN</literal> option on the role;
+   so, if <literal>ADMIN</literal> option is revoked, dependent grants must
    be revoked as well.
   </para>
 
diff --git a/doc/src/sgml/ref/revoke.sgml b/doc/src/sgml/ref/revoke.sgml
index 16e840458c..d783beaaa4 100644
--- a/doc/src/sgml/ref/revoke.sgml
+++ b/doc/src/sgml/ref/revoke.sgml
@@ -197,7 +197,7 @@ REVOKE [ ADMIN OPTION FOR ]
 
   <para>
    When revoking membership in a role, <literal>GRANT OPTION</literal> is instead
-   called <literal>ADMIN OPTION</literal>, but the behavior is similar.
+   called <literal>ADMIN</literal> option, but the behavior is similar.
    Note that, in releases prior to <productname>PostgreSQL</productname> 16,
    dependent privileges were not tracked for grants of role membership,
    and thus <literal>CASCADE</literal> had no effect for role membership.
diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c
index 511ca8d8fd..f46a7ab930 100644
--- a/src/backend/commands/user.c
+++ b/src/backend/commands/user.c
@@ -41,7 +41,7 @@
 #include "utils/timestamp.h"
 
 /*
- * Removing a role grant - or the admin option on it - might recurse to
+ * Removing a role grant - or the ADMIN option on it - might recurse to
  * dependent grants. We use these values to reason about what would need to
  * be done in such cases.
  *
@@ -662,7 +662,7 @@ AlterRole(ParseState *pstate, AlterRoleStmt *stmt)
 	 * superuser.  We also insist on superuser to change the BYPASSRLS
 	 * property.  Otherwise, if you don't have createrole, you're only allowed
 	 * to (1) change your own password or (2) add members to a role for which
-	 * you have ADMIN OPTION.
+	 * you have ADMIN option.
 	 */
 	if (authform->rolsuper || dissuper)
 	{
@@ -704,7 +704,7 @@ AlterRole(ParseState *pstate, AlterRoleStmt *stmt)
 		if (drolemembers && !is_admin_of_role(GetUserId(), roleid))
 			ereport(ERROR,
 					(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
-					 errmsg("must have admin option on role \"%s\" to add members",
+					 errmsg("must have ADMIN option on role \"%s\" to add members",
 							rolename)));
 	}
 
@@ -1483,7 +1483,7 @@ roleSpecsToIds(List *memberNames)
  * memberSpecs: list of RoleSpec of roles to add (used only for error messages)
  * memberIds: OIDs of roles to add
  * grantorId: who is granting the membership (InvalidOid if not set explicitly)
- * admin_opt: granting admin option?
+ * admin_opt: granting ADMIN option?
  */
 static void
 AddRoleMems(const char *rolename, Oid roleid,
@@ -1503,7 +1503,7 @@ AddRoleMems(const char *rolename, Oid roleid,
 		return;
 
 	/*
-	 * Check permissions: must have createrole or admin option on the role to
+	 * Check permissions: must have CREATEROLE or ADMIN option on the role to
 	 * be changed.  To mess with a superuser role, you gotta be superuser.
 	 */
 	if (superuser_arg(roleid))
@@ -1519,7 +1519,7 @@ AddRoleMems(const char *rolename, Oid roleid,
 			!is_admin_of_role(currentUserId, roleid))
 			ereport(ERROR,
 					(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
-					 errmsg("must have admin option on role \"%s\"",
+					 errmsg("must have ADMIN option on role \"%s\"",
 							rolename)));
 	}
 
@@ -1543,7 +1543,7 @@ AddRoleMems(const char *rolename, Oid roleid,
 
 	/*
 	 * Only allow changes to this role by one backend at a time, so that we
-	 * can check integrity constraints like the lack of circular ADMIN OPTION
+	 * can check integrity constraints like the lack of circular ADMIN option
 	 * grants without fear of race conditions.
 	 */
 	LockSharedObject(AuthIdRelationId, roleid, 0,
@@ -1562,7 +1562,7 @@ AddRoleMems(const char *rolename, Oid roleid,
 		 * TO proposed_datdba" fail if is_member_of_role(pg_database_owner,
 		 * proposed_datdba).  Hence, gaining a membership could reduce what a
 		 * role could do.  Alternately, one could allow these memberships to
-		 * complete loops.  A role could then have actual WITH ADMIN OPTION on
+		 * complete loops.  A role could then have actual ADMIN option on
 		 * itself, prompting a decision about is_admin_of_role() treatment of
 		 * the case.
 		 *
@@ -1594,7 +1594,7 @@ AddRoleMems(const char *rolename, Oid roleid,
 	}
 
 	/*
-	 * Disallow attempts to grant ADMIN OPTION back to a user who granted it
+	 * Disallow attempts to grant ADMIN option back to a user who granted it
 	 * to you, similar to what check_circularity does for ACLs. We want the
 	 * chains of grants to remain acyclic, so that it's always possible to use
 	 * REVOKE .. CASCADE to clean up all grants that depend on the one being
@@ -1603,8 +1603,8 @@ AddRoleMems(const char *rolename, Oid roleid,
 	 * NB: This check might look redundant with the check for membership loops
 	 * above, but it isn't. That's checking for role-member loop (e.g. A is a
 	 * member of B and B is a member of A) while this is checking for a
-	 * member-grantor loop (e.g. A gave ADMIN OPTION on X to B and now B, who
-	 * has no other source of ADMIN OPTION on X, tries to give ADMIN OPTION on
+	 * member-grantor loop (e.g. A gave ADMIN option on X to B and now B, who
+	 * has no other source of ADMIN option on X, tries to give ADMIN option on
 	 * X back to A).
 	 */
 	if (admin_opt && grantorId != BOOTSTRAP_SUPERUSERID)
@@ -1629,7 +1629,7 @@ AddRoleMems(const char *rolename, Oid roleid,
 			if (memberid == BOOTSTRAP_SUPERUSERID)
 				ereport(ERROR,
 						(errcode(ERRCODE_INVALID_GRANT_OPERATION),
-						 errmsg("admin option cannot be granted back to your own grantor")));
+						 errmsg("ADMIN option cannot be granted back to your own grantor")));
 			plan_member_revoke(memlist, actions, memberid);
 		}
 
@@ -1654,7 +1654,7 @@ AddRoleMems(const char *rolename, Oid roleid,
 		if (i >= memlist->n_members)
 			ereport(ERROR,
 					(errcode(ERRCODE_INVALID_GRANT_OPERATION),
-					 errmsg("admin option cannot be granted back to your own grantor")));
+					 errmsg("ADMIN option cannot be granted back to your own grantor")));
 
 		ReleaseSysCacheList(memlist);
 	}
@@ -1673,7 +1673,7 @@ AddRoleMems(const char *rolename, Oid roleid,
 
 		/*
 		 * Check if entry for this role/member already exists; if so, give
-		 * warning unless we are adding admin option.
+		 * warning unless we are adding ADMIN option.
 		 */
 		authmem_tuple = SearchSysCache3(AUTHMEMROLEMEM,
 										ObjectIdGetDatum(roleid),
@@ -1751,7 +1751,7 @@ AddRoleMems(const char *rolename, Oid roleid,
  * memberSpecs: list of RoleSpec of roles to del (used only for error messages)
  * memberIds: OIDs of roles to del
  * grantorId: who is revoking the membership
- * admin_opt: remove admin option only?
+ * admin_opt: remove ADMIN option only?
  * behavior: RESTRICT or CASCADE behavior for recursive removal
  */
 static void
@@ -1775,7 +1775,7 @@ DelRoleMems(const char *rolename, Oid roleid,
 		return;
 
 	/*
-	 * Check permissions: must have createrole or admin option on the role to
+	 * Check permissions: must have CREATEROLE or ADMIN option on the role to
 	 * be changed.  To mess with a superuser role, you gotta be superuser.
 	 */
 	if (superuser_arg(roleid))
@@ -1791,7 +1791,7 @@ DelRoleMems(const char *rolename, Oid roleid,
 			!is_admin_of_role(currentUserId, roleid))
 			ereport(ERROR,
 					(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
-					 errmsg("must have admin option on role \"%s\"",
+					 errmsg("must have ADMIN option on role \"%s\"",
 							rolename)));
 	}
 
@@ -1862,7 +1862,7 @@ DelRoleMems(const char *rolename, Oid roleid,
 		}
 		else
 		{
-			/* Just turn off the admin option */
+			/* Just turn off the ADMIN option */
 			HeapTuple	tuple;
 			Datum		new_record[Natts_pg_auth_members] = {0};
 			bool		new_record_nulls[Natts_pg_auth_members] = {0};
@@ -1891,7 +1891,7 @@ DelRoleMems(const char *rolename, Oid roleid,
  * Sanity-check, or infer, the grantor for a GRANT or REVOKE statement
  * targeting a role.
  *
- * The grantor must always be either a role with ADMIN OPTION on the role in
+ * The grantor must always be either a role with ADMIN option on the role in
  * which membership is being granted, or the bootstrap superuser. This is
  * similar to the restriction enforced by select_best_grantor, except that
  * roles don't have owners, so we regard the bootstrap superuser as the
@@ -1901,8 +1901,8 @@ DelRoleMems(const char *rolename, Oid roleid,
  * be passed as InvalidOid, and this function will infer the user to be
  * recorded as the grantor. In many cases, this will be the current user, but
  * things get more complicated when the current user doesn't possess ADMIN
- * OPTION on the role but rather relies on having CREATEROLE privileges, or
- * on inheriting the privileges of a role which does have ADMIN OPTION. See
+ * option on the role but rather relies on having CREATEROLE privileges, or
+ * on inheriting the privileges of a role which does have ADMIN option. See
  * below for details.
  *
  * If the grantor was specified by the user, then it must be a user that
@@ -1931,7 +1931,7 @@ check_role_grantor(Oid currentUserId, Oid roleid, Oid grantorId, bool is_grant)
 			return BOOTSTRAP_SUPERUSERID;
 
 		/*
-		 * Otherwise, the grantor must either have ADMIN OPTION on the role or
+		 * Otherwise, the grantor must either have ADMIN option on the role or
 		 * inherit the privileges of a role which does. In the former case,
 		 * record the grantor as the current user; in the latter, pick one of
 		 * the roles that is "most directly" inherited by the current role
@@ -1951,7 +1951,7 @@ check_role_grantor(Oid currentUserId, Oid roleid, Oid grantorId, bool is_grant)
 	 * If an explicit grantor is specified, it must be a role whose privileges
 	 * the current user possesses.
 	 *
-	 * It should also be a role that has ADMIN OPTION on the target role, but
+	 * It should also be a role that has ADMIN option on the target role, but
 	 * we check this condition only in case of GRANT. For REVOKE, no matching
 	 * grant should exist anyway, but if it somehow does, let the user get rid
 	 * of it.
@@ -1968,7 +1968,7 @@ check_role_grantor(Oid currentUserId, Oid roleid, Oid grantorId, bool is_grant)
 			select_best_admin(grantorId, roleid) != grantorId)
 			ereport(ERROR,
 					(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
-					 errmsg("grantor must have ADMIN OPTION on \"%s\"",
+					 errmsg("grantor must have ADMIN option on \"%s\"",
 							GetUserNameFromId(roleid, false))));
 	}
 	else
@@ -2012,7 +2012,7 @@ initialize_revoke_actions(CatCList *memlist)
 
 /*
  * Figure out what we would need to do in order to revoke a grant, or just the
- * admin option on a grant, given that there might be dependent privileges.
+ * ADMIN option on a grant, given that there might be dependent privileges.
  *
  * 'memlist' should be a list of all grants for the target role.
  *
@@ -2126,7 +2126,7 @@ plan_recursive_revoke(CatCList *memlist, RevokeRoleGrantAction *actions,
 		actions[index] = RRG_REMOVE_ADMIN_OPTION;
 	}
 
-	/* Determine whether the member would still have ADMIN OPTION. */
+	/* Determine whether the member would still have ADMIN option. */
 	for (i = 0; i < memlist->n_members; ++i)
 	{
 		HeapTuple	am_cascade_tuple;
@@ -2143,7 +2143,7 @@ plan_recursive_revoke(CatCList *memlist, RevokeRoleGrantAction *actions,
 		}
 	}
 
-	/* If the member would still have ADMIN OPTION, we need not recurse. */
+	/* If the member would still have ADMIN option, we need not recurse. */
 	if (would_still_have_admin_option)
 		return;
 
diff --git a/src/backend/utils/adt/acl.c b/src/backend/utils/adt/acl.c
index 3e045da31f..02f4744acb 100644
--- a/src/backend/utils/adt/acl.c
+++ b/src/backend/utils/adt/acl.c
@@ -4802,7 +4802,7 @@ has_rolinherit(Oid roleid)
  *
  * If admin_of is not InvalidOid, this function sets *admin_role, either
  * to the OID of the first role in the result list that directly possesses
- * ADMIN OPTION on the role corresponding to admin_of, or to InvalidOid if
+ * ADMIN option on the role corresponding to admin_of, or to InvalidOid if
  * there is no such role.
  */
 static List *
@@ -4819,7 +4819,7 @@ roles_is_member_of(Oid roleid, enum RoleRecurseType type,
 	if (admin_role != NULL)
 		*admin_role = InvalidOid;
 
-	/* If cache is valid and ADMIN OPTION not sought, just return the list */
+	/* If cache is valid and ADMIN option not sought, just return the list */
 	if (cached_role[type] == roleid && !OidIsValid(admin_of) &&
 		OidIsValid(cached_role[type]))
 		return cached_roles[type];
@@ -5013,7 +5013,7 @@ is_member_of_role_nosuper(Oid member, Oid role)
 
 /*
  * Is member an admin of role?	That is, is member the role itself (subject to
- * restrictions below), a member (directly or indirectly) WITH ADMIN OPTION,
+ * restrictions below), a member (directly or indirectly) with ADMIN option,
  * or a superuser?
  */
 bool
@@ -5024,7 +5024,7 @@ is_admin_of_role(Oid member, Oid role)
 	if (superuser_arg(member))
 		return true;
 
-	/* By policy, a role cannot have WITH ADMIN OPTION on itself. */
+	/* By policy, a role cannot have ADMIN option on itself. */
 	if (member == role)
 		return false;
 
@@ -5033,11 +5033,11 @@ is_admin_of_role(Oid member, Oid role)
 }
 
 /*
- * Find a role whose privileges "member" inherits which has ADMIN OPTION
+ * Find a role whose privileges "member" inherits which has ADMIN option
  * on "role", ignoring super-userness.
  *
  * There might be more than one such role; prefer one which involves fewer
- * hops. That is, if member has ADMIN OPTION, prefer that over all other
+ * hops. That is, if member has ADMIN option, prefer that over all other
  * options; if not, prefer a role from which member inherits more directly
  * over more indirect inheritance.
  */
@@ -5046,7 +5046,7 @@ select_best_admin(Oid member, Oid role)
 {
 	Oid			admin_role;
 
-	/* By policy, a role cannot have WITH ADMIN OPTION on itself. */
+	/* By policy, a role cannot have ADMIN option on itself. */
 	if (member == role)
 		return InvalidOid;
 
diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c
index e8a2bfa6bd..27ef96941a 100644
--- a/src/bin/pg_dump/pg_dumpall.c
+++ b/src/bin/pg_dump/pg_dumpall.c
@@ -956,7 +956,7 @@ dumpRoleMembership(PGconn *conn)
 	/*
 	 * Previous versions of PostgreSQL didn't used to track the grantor very
 	 * carefully in the backend, and the grantor could be any user even if
-	 * they didn't have ADMIN OPTION on the role, or a user that no longer
+	 * they didn't have ADMIN option on the role, or a user that no longer
 	 * existed. To avoid dump and restore failures, don't dump the grantor
 	 * when talking to an old server version.
 	 */
@@ -981,13 +981,13 @@ dumpRoleMembership(PGconn *conn)
 
 	/*
 	 * We can't dump these GRANT commands in arbitary order, because a role
-	 * that is named as a grantor must already have ADMIN OPTION on the
+	 * that is named as a grantor must already have ADMIN option on the
 	 * role for which it is granting permissions, except for the boostrap
 	 * superuser, who can always be named as the grantor.
 	 *
 	 * We handle this by considering these grants role by role. For each role,
 	 * we initially consider the only allowable grantor to be the boostrap
-	 * superuser. Every time we grant ADMIN OPTION on the role to some user,
+	 * superuser. Every time we grant ADMIN option on the role to some user,
 	 * that user also becomes an allowable grantor. We make repeated passes
 	 * over the grants for the role, each time dumping those whose grantors
 	 * are allowable and which we haven't done yet. Eventually this should
@@ -1072,7 +1072,7 @@ dumpRoleMembership(PGconn *conn)
 				--remaining;
 
 				/*
-				 * If ADMIN OPTION is being granted, remember that grants
+				 * If ADMIN option is being granted, remember that grants
 				 * listing this member as the grantor can now be dumped.
 				 */
 				if (*admin_option == 't')
diff --git a/src/bin/scripts/t/040_createuser.pl b/src/bin/scripts/t/040_createuser.pl
index 834d258bf8..a9de57f3b7 100644
--- a/src/bin/scripts/t/040_createuser.pl
+++ b/src/bin/scripts/t/040_createuser.pl
@@ -39,7 +39,7 @@ $node->issues_sql_like(
 		'regress user2', 'regress user #4'
 	],
 	qr/statement: CREATE ROLE "regress user #4" NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN ADMIN regress_user1,"regress user2";/,
-	'add a role as a member with admin option of the newly created role');
+	'add a role as a member with ADMIN option of the newly created role');
 $node->issues_sql_like(
 	[
 		'createuser',      '-m',
diff --git a/src/include/catalog/pg_auth_members.h b/src/include/catalog/pg_auth_members.h
index e57ec4f810..f0e04baadd 100644
--- a/src/include/catalog/pg_auth_members.h
+++ b/src/include/catalog/pg_auth_members.h
@@ -33,7 +33,7 @@ CATALOG(pg_auth_members,1261,AuthMemRelationId) BKI_SHARED_RELATION BKI_ROWTYPE_
 	Oid			roleid BKI_LOOKUP(pg_authid);	/* ID of a role */
 	Oid			member BKI_LOOKUP(pg_authid);	/* ID of a member of that role */
 	Oid			grantor BKI_LOOKUP(pg_authid);	/* who granted the membership */
-	bool		admin_option;	/* granted with admin option? */
+	bool		admin_option;	/* granted with ADMIN option? */
 } FormData_pg_auth_members;
 
 /* ----------------
diff --git a/src/test/regress/expected/privileges.out b/src/test/regress/expected/privileges.out
index 0154a09262..56981c85c8 100644
--- a/src/test/regress/expected/privileges.out
+++ b/src/test/regress/expected/privileges.out
@@ -37,7 +37,7 @@ CREATE ROLE regress_priv_role;
 GRANT regress_priv_user1 TO regress_priv_user2 WITH ADMIN OPTION;
 GRANT regress_priv_user1 TO regress_priv_user3 WITH ADMIN OPTION GRANTED BY regress_priv_user2;
 GRANT regress_priv_user1 TO regress_priv_user2 WITH ADMIN OPTION GRANTED BY regress_priv_user3;
-ERROR:  admin option cannot be granted back to your own grantor
+ERROR:  ADMIN option cannot be granted back to your own grantor
 -- need CASCADE to revoke grant or admin option if dependent grants exist
 REVOKE ADMIN OPTION FOR regress_priv_user1 FROM regress_priv_user2; -- fail
 ERROR:  dependent privileges exist
@@ -159,7 +159,7 @@ CREATE FUNCTION leak(integer,integer) RETURNS boolean
 ALTER FUNCTION leak(integer,integer) OWNER TO regress_priv_user1;
 -- test owner privileges
 GRANT regress_priv_role TO regress_priv_user1 WITH ADMIN OPTION GRANTED BY regress_priv_role; -- error, doesn't have ADMIN OPTION
-ERROR:  grantor must have ADMIN OPTION on "regress_priv_role"
+ERROR:  grantor must have ADMIN option on "regress_priv_role"
 GRANT regress_priv_role TO regress_priv_user1 WITH ADMIN OPTION GRANTED BY CURRENT_ROLE;
 REVOKE ADMIN OPTION FOR regress_priv_role FROM regress_priv_user1 GRANTED BY foo; -- error
 ERROR:  role "foo" does not exist
@@ -1774,7 +1774,7 @@ REFRESH MATERIALIZED VIEW sro_mv;
 ERROR:  cannot fire deferred trigger within security-restricted operation
 CONTEXT:  SQL function "mv_action" statement 1
 BEGIN; SET CONSTRAINTS ALL IMMEDIATE; REFRESH MATERIALIZED VIEW sro_mv; COMMIT;
-ERROR:  must have admin option on role "regress_priv_group2"
+ERROR:  must have ADMIN option on role "regress_priv_group2"
 CONTEXT:  SQL function "unwanted_grant" statement 1
 SQL statement "SELECT unwanted_grant()"
 PL/pgSQL function sro_trojan() line 1 at PERFORM
@@ -1804,10 +1804,10 @@ CREATE FUNCTION dogrant_ok() RETURNS void LANGUAGE sql SECURITY DEFINER AS
 GRANT regress_priv_group2 TO regress_priv_user5; -- ok: had ADMIN OPTION
 SET ROLE regress_priv_group2;
 GRANT regress_priv_group2 TO regress_priv_user5; -- fails: SET ROLE suspended privilege
-ERROR:  must have admin option on role "regress_priv_group2"
+ERROR:  must have ADMIN option on role "regress_priv_group2"
 SET SESSION AUTHORIZATION regress_priv_user1;
 GRANT regress_priv_group2 TO regress_priv_user5; -- fails: no ADMIN OPTION
-ERROR:  must have admin option on role "regress_priv_group2"
+ERROR:  must have ADMIN option on role "regress_priv_group2"
 SELECT dogrant_ok();			-- ok: SECURITY DEFINER conveys ADMIN
 NOTICE:  role "regress_priv_user5" has already been granted membership in role "regress_priv_group2" by role "regress_priv_user4"
  dogrant_ok 
@@ -1817,10 +1817,10 @@ NOTICE:  role "regress_priv_user5" has already been granted membership in role "
 
 SET ROLE regress_priv_group2;
 GRANT regress_priv_group2 TO regress_priv_user5; -- fails: SET ROLE did not help
-ERROR:  must have admin option on role "regress_priv_group2"
+ERROR:  must have ADMIN option on role "regress_priv_group2"
 SET SESSION AUTHORIZATION regress_priv_group2;
 GRANT regress_priv_group2 TO regress_priv_user5; -- fails: no self-admin
-ERROR:  must have admin option on role "regress_priv_group2"
+ERROR:  must have ADMIN option on role "regress_priv_group2"
 SET SESSION AUTHORIZATION regress_priv_user4;
 DROP FUNCTION dogrant_ok();
 REVOKE regress_priv_group2 FROM regress_priv_user5;

Reply via email to