From 7e5f5177996150bf3845562d00d41d1e1847d7e3 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 30 Nov 2023 05:33:55 +0100 Subject: [PATCH] Improve "user mapping not found" error message Display the name of the foreign server for which the user mapping was not found. Author: Ian Lawrence Barwick Reviewed-by: Laurenz Albe Reviewed-by: Peter Eisentraut Discussion: https://www.postgresql.org/message-id/flat/CAB8KJ=jFzNaeyFtLcTZNOc6fd1+F93pGVLFa-wyt31wn7VNxqQ@mail.gmail.com --- contrib/postgres_fdw/expected/postgres_fdw.out | 4 ++-- src/backend/foreign/foreign.c | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index 22cae37a1e..0a5bdf8bcc 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -2717,10 +2717,10 @@ ALTER FOREIGN TABLE ft4 OPTIONS (ADD use_remote_estimate 'true'); -- regress_view_owner_another, the view owner, though it fails as expected -- due to the lack of a user mapping for that user. EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM v4; -ERROR: user mapping not found for "regress_view_owner_another" +ERROR: user mapping not found for user "regress_view_owner_another", server "loopback" -- Likewise, but with the query under an UNION ALL EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM (SELECT * FROM v4 UNION ALL SELECT * FROM v4); -ERROR: user mapping not found for "regress_view_owner_another" +ERROR: user mapping not found for user "regress_view_owner_another", server "loopback" -- Should not get that error once a user mapping is created CREATE USER MAPPING FOR regress_view_owner_another SERVER loopback OPTIONS (password_required 'false'); EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM v4; diff --git a/src/backend/foreign/foreign.c b/src/backend/foreign/foreign.c index ca3ad55b62..fc3edef2a8 100644 --- a/src/backend/foreign/foreign.c +++ b/src/backend/foreign/foreign.c @@ -217,10 +217,14 @@ 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; -- 2.39.5