diff options
Diffstat (limited to 'src/backend/commands')
-rw-r--r-- | src/backend/commands/user.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c index c14465eb87b..75f1b3cd4f2 100644 --- a/src/backend/commands/user.c +++ b/src/backend/commands/user.c @@ -429,13 +429,17 @@ CreateRole(CreateRoleStmt *stmt) */ foreach(item, addroleto) { - char *oldrolename = strVal(lfirst(item)); - Oid oldroleid = get_role_oid(oldrolename, false); + RoleSpec *oldrole = lfirst(item); + HeapTuple oldroletup = get_rolespec_tuple((Node *) oldrole); + Oid oldroleid = HeapTupleGetOid(oldroletup); + char *oldrolename = NameStr(((Form_pg_authid) GETSTRUCT(oldroletup))->rolname); AddRoleMems(oldrolename, oldroleid, list_make1(makeString(stmt->role)), list_make1_oid(roleid), GetUserId(), false); + + ReleaseSysCache(oldroletup); } /* |