*** a/doc/src/sgml/fdwhandler.sgml
--- b/doc/src/sgml/fdwhandler.sgml
***************
*** 1323,1342 **** GetForeignTable(Oid relid);
  
      <para>
  <programlisting>
- UserMapping *
- GetUserMappingById(Oid umid);
- </programlisting>
- 
-      This function returns the <structname>UserMapping</structname> object for
-      the given user mapping OID.  The OID of a user mapping for a foreign scan
-      is available in the <structname>RelOptInfo</structname>.
-      If there is no mapping for the OID, this function will throw an error.
-      A <structname>UserMapping</structname> object contains properties of the
-      user mapping (see <filename>foreign/foreign.h</filename> for details).
-     </para>
- 
-     <para>
- <programlisting>
  List *
  GetForeignColumnOptions(Oid relid, AttrNumber attnum);
  </programlisting>
--- 1323,1328 ----
*** a/src/backend/foreign/foreign.c
--- b/src/backend/foreign/foreign.c
***************
*** 31,38 ****
  extern Datum pg_options_to_table(PG_FUNCTION_ARGS);
  extern Datum postgresql_fdw_validator(PG_FUNCTION_ARGS);
  
- static HeapTuple find_user_mapping(Oid userid, Oid serverid);
- 
  
  /*
   * GetForeignDataWrapper -	look up the foreign-data wrapper by OID.
--- 31,36 ----
***************
*** 161,214 **** GetForeignServerByName(const char *srvname, bool missing_ok)
  	return GetForeignServer(serverid);
  }
  
- /*
-  * GetUserMappingById - look up the user mapping by its OID.
-  */
- UserMapping *
- GetUserMappingById(Oid umid)
- {
- 	Datum		datum;
- 	HeapTuple	tp;
- 	bool		isnull;
- 	UserMapping *um;
- 
- 	tp = SearchSysCache1(USERMAPPINGOID, ObjectIdGetDatum(umid));
- 	if (!HeapTupleIsValid(tp))
- 		elog(ERROR, "cache lookup failed for user mapping %u", umid);
- 
- 	um = (UserMapping *) palloc(sizeof(UserMapping));
- 	um->umid = umid;
- 
- 	/* Extract the umuser */
- 	datum = SysCacheGetAttr(USERMAPPINGOID,
- 							tp,
- 							Anum_pg_user_mapping_umuser,
- 							&isnull);
- 	Assert(!isnull);
- 	um->userid = DatumGetObjectId(datum);
- 
- 	/* Extract the umserver */
- 	datum = SysCacheGetAttr(USERMAPPINGOID,
- 							tp,
- 							Anum_pg_user_mapping_umserver,
- 							&isnull);
- 	Assert(!isnull);
- 	um->serverid = DatumGetObjectId(datum);
- 
- 	/* Extract the umoptions */
- 	datum = SysCacheGetAttr(USERMAPPINGOID,
- 							tp,
- 							Anum_pg_user_mapping_umoptions,
- 							&isnull);
- 	if (isnull)
- 		um->options = NIL;
- 	else
- 		um->options = untransformRelOptions(datum);
- 
- 	ReleaseSysCache(tp);
- 
- 	return um;
- }
  
  /*
   * GetUserMapping - look up the user mapping.
--- 159,164 ----
***************
*** 224,230 **** GetUserMapping(Oid userid, Oid serverid)
  	bool		isnull;
  	UserMapping *um;
  
! 	tp = find_user_mapping(userid, serverid);
  
  	um = (UserMapping *) palloc(sizeof(UserMapping));
  	um->umid = HeapTupleGetOid(tp);
--- 174,196 ----
  	bool		isnull;
  	UserMapping *um;
  
! 	tp = SearchSysCache2(USERMAPPINGUSERSERVER,
! 						 ObjectIdGetDatum(userid),
! 						 ObjectIdGetDatum(serverid));
! 
! 	if (!HeapTupleIsValid(tp))
! 	{
! 		/* Not found for the specific user -- try PUBLIC */
! 		tp = SearchSysCache2(USERMAPPINGUSERSERVER,
! 							 ObjectIdGetDatum(InvalidOid),
! 							 ObjectIdGetDatum(serverid));
! 	}
! 
! 	if (!HeapTupleIsValid(tp))
! 		ereport(ERROR,
! 				(errcode(ERRCODE_UNDEFINED_OBJECT),
! 				 errmsg("user mapping not found for \"%s\"",
! 						MappingUserName(userid))));
  
  	um = (UserMapping *) palloc(sizeof(UserMapping));
  	um->umid = HeapTupleGetOid(tp);
***************
*** 246,305 **** GetUserMapping(Oid userid, Oid serverid)
  	return um;
  }
  
- /*
-  * GetUserMappingId - look up the user mapping, and return its OID
-  *
-  * If no mapping is found for the supplied user, we also look for
-  * PUBLIC mappings (userid == InvalidOid).
-  */
- Oid
- GetUserMappingId(Oid userid, Oid serverid)
- {
- 	HeapTuple	tp;
- 	Oid			umid;
- 
- 	tp = find_user_mapping(userid, serverid);
- 
- 	/* Extract the Oid */
- 	umid = HeapTupleGetOid(tp);
- 
- 	ReleaseSysCache(tp);
- 
- 	return umid;
- }
- 
- /*
-  * find_user_mapping - Guts of GetUserMapping family.
-  *
-  * If no mapping is found for the supplied user, we also look for
-  * PUBLIC mappings (userid == InvalidOid).
-  */
- static HeapTuple
- find_user_mapping(Oid userid, Oid serverid)
- {
- 	HeapTuple	tp;
- 
- 	tp = SearchSysCache2(USERMAPPINGUSERSERVER,
- 						 ObjectIdGetDatum(userid),
- 						 ObjectIdGetDatum(serverid));
- 
- 	if (HeapTupleIsValid(tp))
- 		return tp;
- 
- 	/* Not found for the specific user -- try PUBLIC */
- 	tp = SearchSysCache2(USERMAPPINGUSERSERVER,
- 						 ObjectIdGetDatum(InvalidOid),
- 						 ObjectIdGetDatum(serverid));
- 
- 	if (!HeapTupleIsValid(tp))
- 		ereport(ERROR,
- 				(errcode(ERRCODE_UNDEFINED_OBJECT),
- 				 errmsg("user mapping not found for \"%s\"",
- 						MappingUserName(userid))));
- 
- 	return tp;
- }
- 
  
  /*
   * GetForeignTable - look up the foreign table definition by relation oid.
--- 212,217 ----
*** a/src/include/foreign/foreign.h
--- b/src/include/foreign/foreign.h
***************
*** 72,79 **** typedef struct ForeignTable
  extern ForeignServer *GetForeignServer(Oid serverid);
  extern ForeignServer *GetForeignServerByName(const char *name, bool missing_ok);
  extern UserMapping *GetUserMapping(Oid userid, Oid serverid);
- extern Oid	GetUserMappingId(Oid userid, Oid serverid);
- extern UserMapping *GetUserMappingById(Oid umid);
  extern ForeignDataWrapper *GetForeignDataWrapper(Oid fdwid);
  extern ForeignDataWrapper *GetForeignDataWrapperByName(const char *name,
  							bool missing_ok);
--- 72,77 ----
