diff options
Diffstat (limited to 'src/backend/utils/init/miscinit.c')
-rw-r--r-- | src/backend/utils/init/miscinit.c | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c index 1dc31535fd6..b0d85af14db 100644 --- a/src/backend/utils/init/miscinit.c +++ b/src/backend/utils/init/miscinit.c @@ -648,23 +648,29 @@ SetCurrentRoleId(Oid roleid, bool is_superuser) /* - * Get user name from user oid + * Get user name from user oid, returns NULL for nonexistent roleid if noerr + * is true. */ char * -GetUserNameFromId(Oid roleid) +GetUserNameFromId(Oid roleid, bool noerr) { HeapTuple tuple; char *result; tuple = SearchSysCache1(AUTHOID, ObjectIdGetDatum(roleid)); if (!HeapTupleIsValid(tuple)) - ereport(ERROR, - (errcode(ERRCODE_UNDEFINED_OBJECT), - errmsg("invalid role OID: %u", roleid))); - - result = pstrdup(NameStr(((Form_pg_authid) GETSTRUCT(tuple))->rolname)); - - ReleaseSysCache(tuple); + { + if (!noerr) + ereport(ERROR, + (errcode(ERRCODE_UNDEFINED_OBJECT), + errmsg("invalid role OID: %u", roleid))); + result = NULL; + } + else + { + result = pstrdup(NameStr(((Form_pg_authid) GETSTRUCT(tuple))->rolname)); + ReleaseSysCache(tuple); + } return result; } |