* Exported routines for examining a user's privileges for various objects
  *
  * See aclmask() for a description of the common API for these functions.
- *
- * Note: we give lookup failure the full ereport treatment because the
- * has_xxx_privilege() family of functions allow users to pass any random
- * OID to these functions.
  * ****************************************************************
  */
 
            return 0;
        }
        else
-           ereport(ERROR,
-                   (errcode(ERRCODE_UNDEFINED_OBJECT),
-                    errmsg("%s with OID %u does not exist",
-                           get_object_class_descr(classid), objectid)));
+           elog(ERROR, "cache lookup failed for %s %u",
+                get_object_class_descr(classid), objectid);
    }
 
    ownerId = DatumGetObjectId(SysCacheGetAttrNotNull(cacheid,
 
    Oid         dbOid = PG_GETARG_OID(0);
    int64       size;
 
+   /*
+    * Not needed for correctness, but avoid non-user-facing error message
+    * later if the database doesn't exist.
+    */
+   if (!SearchSysCacheExists1(DATABASEOID, ObjectIdGetDatum(dbOid)))
+       ereport(ERROR,
+               errcode(ERRCODE_UNDEFINED_OBJECT),
+               errmsg("database with OID %u does not exist", dbOid));
+
    size = calculate_database_size(dbOid);
 
    if (size == 0)
    Oid         tblspcOid = PG_GETARG_OID(0);
    int64       size;
 
+   /*
+    * Not needed for correctness, but avoid non-user-facing error message
+    * later if the tablespace doesn't exist.
+    */
+   if (!SearchSysCacheExists1(TABLESPACEOID, ObjectIdGetDatum(tblspcOid)))
+       ereport(ERROR,
+               errcode(ERRCODE_UNDEFINED_OBJECT),
+               errmsg("tablespace with OID %u does not exist", tblspcOid));
+
    size = calculate_tablespace_size(tblspcOid);
 
    if (size < 0)