Index: contrib/dblink/dblink.c =================================================================== --- contrib/dblink/dblink.c (HEAD) +++ contrib/dblink/dblink.c (working copy) @@ -2408,7 +2408,7 @@ Oid fdwid = foreign_server->fdwid; Oid userid = GetUserId(); - user_mapping = GetUserMapping(userid, serverid); + user_mapping = GetUserMapping(userid, serverid, true); fdw = GetForeignDataWrapper(fdwid); /* Check permissions, user must have usage on the server. */ @@ -2432,7 +2432,7 @@ escape_param_str(strVal(def->arg))); } - foreach(cell, user_mapping->options) + foreach(cell, user_mapping ? user_mapping->options : NIL) { DefElem *def = lfirst(cell); Index: src/backend/foreign/foreign.c =================================================================== --- src/backend/foreign/foreign.c (HEAD) +++ src/backend/foreign/foreign.c (working copy) @@ -212,7 +212,7 @@ * PUBLIC mappings (userid == InvalidOid). */ UserMapping * -GetUserMapping(Oid userid, Oid serverid) +GetUserMapping(Oid userid, Oid serverid, bool missing_ok) { Form_pg_user_mapping umform; Datum datum; @@ -235,10 +235,15 @@ } if (!HeapTupleIsValid(tp)) + { + if (missing_ok) + return NULL; + ereport(ERROR, (errcode(ERRCODE_UNDEFINED_OBJECT), errmsg("user mapping not found for \"%s\"", MappingUserName(userid)))); + } umform = (Form_pg_user_mapping) GETSTRUCT(tp); Index: src/include/foreign/foreign.h =================================================================== --- src/include/foreign/foreign.h (HEAD) +++ src/include/foreign/foreign.h (working copy) @@ -63,7 +63,7 @@ extern ForeignServer *GetForeignServer(Oid serverid); extern ForeignServer *GetForeignServerByName(const char *name, bool missing_ok); extern Oid GetForeignServerOidByName(const char *name, bool missing_ok); -extern UserMapping *GetUserMapping(Oid userid, Oid serverid); +extern UserMapping *GetUserMapping(Oid userid, Oid serverid, bool missing_ok); extern ForeignDataWrapper *GetForeignDataWrapper(Oid fdwid); extern ForeignDataWrapper *GetForeignDataWrapperByName(const char *name, bool missing_ok);