diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c
index ec4c987..94135fd 100644
--- a/src/backend/catalog/objectaddress.c
+++ b/src/backend/catalog/objectaddress.c
@@ -281,6 +281,7 @@ get_object_address(ObjectType objtype, List *objname, List *objargs,
 	/* Some kind of lock must be taken. */
 	Assert(lockmode != NoLock);
 
+retry:
 	switch (objtype)
 	{
 		case OBJECT_INDEX:
@@ -432,10 +433,14 @@ get_object_address(ObjectType objtype, List *objname, List *objargs,
 			LockSharedObject(address.classId, address.objectId, 0, lockmode);
 		else
 			LockDatabaseObject(address.classId, address.objectId, 0, lockmode);
-		/* Did it go away while we were waiting for the lock? */
+		/*
+		 * Did it go away while we were waiting for the lock?  If so, look up
+		 * the name again.  This will either throw a better error message than
+		 * we could generate otherwise, or it will find the new object that
+		 * now has the same name as the dropped one.
+		 */
 		if (!object_exists(address))
-			elog(ERROR, "cache lookup failed for class %u object %u subobj %d",
-				 address.classId, address.objectId, address.objectSubId);
+			goto retry;
 	}
 
 	/* Return the object address and the relation. */
