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;