diff --git a/src/backend/catalog/namespace.c b/src/backend/catalog/namespace.c
index e74b331e37653ea590ee8563a269b0e4784066a5..dc627e42880f3fd72d802f57938bd8fdd396bd84 100644
--- a/src/backend/catalog/namespace.c
+++ b/src/backend/catalog/namespace.c
@@ -13,7 +13,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/catalog/namespace.c,v 1.77 2005/08/01 04:03:54 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/catalog/namespace.c,v 1.78 2005/10/06 22:43:16 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -335,12 +335,28 @@ RelationIsVisible(Oid relid)
 		/*
 		 * If it is in the path, it might still not be visible; it could
 		 * be hidden by another relation of the same name earlier in the
-		 * path. So we must do a slow check to see if this rel would be
-		 * found by RelnameGetRelid.
+		 * path. So we must do a slow check for conflicting relations.
 		 */
 		char	   *relname = NameStr(relform->relname);
+		ListCell   *l;
 
-		visible = (RelnameGetRelid(relname) == relid);
+		visible = false;
+		foreach(l, namespaceSearchPath)
+		{
+			Oid			namespaceId = lfirst_oid(l);
+
+			if (namespaceId == relnamespace)
+			{
+				/* Found it first in path */
+				visible = true;
+				break;
+			}
+			if (OidIsValid(get_relname_relid(relname, namespaceId)))
+			{
+				/* Found something else first in path */
+				break;
+			}
+		}
 	}
 
 	ReleaseSysCache(reltup);
@@ -417,12 +433,31 @@ TypeIsVisible(Oid typid)
 		/*
 		 * If it is in the path, it might still not be visible; it could
 		 * be hidden by another type of the same name earlier in the path.
-		 * So we must do a slow check to see if this type would be found
-		 * by TypenameGetTypid.
+		 * So we must do a slow check for conflicting types.
 		 */
 		char	   *typname = NameStr(typform->typname);
+		ListCell   *l;
 
-		visible = (TypenameGetTypid(typname) == typid);
+		visible = false;
+		foreach(l, namespaceSearchPath)
+		{
+			Oid			namespaceId = lfirst_oid(l);
+
+			if (namespaceId == typnamespace)
+			{
+				/* Found it first in path */
+				visible = true;
+				break;
+			}
+			if (SearchSysCacheExists(TYPENAMENSP,
+									 PointerGetDatum(typname),
+									 ObjectIdGetDatum(namespaceId),
+									 0, 0))
+			{
+				/* Found something else first in path */
+				break;
+			}
+		}
 	}
 
 	ReleaseSysCache(typtup);