Hi

Mild corner-case annoyance while doing Random Experimental Things:

    postgres=# SELECT * FROM parttest;
    ERROR:  user mapping not found for "postgres"

Okaaaay, but which server?

    postgres=# \det
           List of foreign tables
     Schema |     Table     |   Server
    --------+---------------+-----------
     public | parttest_10_1 | fdw_node2
     public | parttest_10_3 | fdw_node3
     public | parttest_10_5 | fdw_node4
     public | parttest_10_7 | fdw_node5
     public | parttest_10_9 | fdw_node6
    (5 rows)

(Muffled sound of small patch hatching) aha:

    postgres=# SELECT * FROM parttest;
    ERROR:  user mapping not found for user "postgres", server "fdw_node5"

Regards

Ian Barwick
commit 1e08150c0bba813050b00e4e35cdba1572fd5564
Author: Ian Barwick <barw...@gmail.com>
Date:   Fri Jun 23 16:36:41 2023 +0900

    Improve "user mapping not found" error message
    
    Display the name of the foreign server for which the user mapping
    was not found.

diff --git a/src/backend/foreign/foreign.c b/src/backend/foreign/foreign.c
index ca3ad55b62..b649064141 100644
--- a/src/backend/foreign/foreign.c
+++ b/src/backend/foreign/foreign.c
@@ -217,10 +217,15 @@ GetUserMapping(Oid userid, Oid serverid)
 	}
 
 	if (!HeapTupleIsValid(tp))
+	{
+		ForeignServer *server = GetForeignServer(serverid);
+
 		ereport(ERROR,
 				(errcode(ERRCODE_UNDEFINED_OBJECT),
-				 errmsg("user mapping not found for \"%s\"",
-						MappingUserName(userid))));
+				 errmsg("user mapping not found for user \"%s\", server \"%s\"",
+						MappingUserName(userid),
+						server->servername)));
+	}
 
 	um = (UserMapping *) palloc(sizeof(UserMapping));
 	um->umid = ((Form_pg_user_mapping) GETSTRUCT(tp))->oid;

Reply via email to