Skip to content

Commit e166e64

Browse files
committed
Fix user mapping object description
We were using "user mapping for user XYZ" as description for user mappings, but that's ambiguous because users can have mappings on multiple foreign servers; therefore change it to "for user XYZ on server UVW" instead. Object identities for user mappings are also updated in the same way, in branches 9.3 and above. The incomplete description string was introduced together with the whole SQL/MED infrastructure by commit cae565e of 8.4 era, so backpatch all the way back.
1 parent d13bbfa commit e166e64

File tree

2 files changed

+20
-14
lines changed

2 files changed

+20
-14
lines changed

src/backend/catalog/dependency.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2863,14 +2863,18 @@ getObjectDescription(const ObjectAddress *object)
28632863
HeapTuple tup;
28642864
Oid useid;
28652865
char *usename;
2866+
Form_pg_user_mapping umform;
2867+
ForeignServer *srv;
28662868

28672869
tup = SearchSysCache1(USERMAPPINGOID,
28682870
ObjectIdGetDatum(object->objectId));
28692871
if (!HeapTupleIsValid(tup))
28702872
elog(ERROR, "cache lookup failed for user mapping %u",
28712873
object->objectId);
28722874

2873-
useid = ((Form_pg_user_mapping) GETSTRUCT(tup))->umuser;
2875+
umform = (Form_pg_user_mapping) GETSTRUCT(tup);
2876+
useid = umform->umuser;
2877+
srv = GetForeignServer(umform->umserver);
28742878

28752879
ReleaseSysCache(tup);
28762880

@@ -2879,7 +2883,9 @@ getObjectDescription(const ObjectAddress *object)
28792883
else
28802884
usename = "public";
28812885

2882-
appendStringInfo(&buffer, _("user mapping for %s"), usename);
2886+
appendStringInfo(&buffer, _("user mapping for %s on server %s"), usename,
2887+
srv->servername);
2888+
28832889
break;
28842890
}
28852891

src/test/regress/expected/foreign_data.out

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ CREATE USER MAPPING FOR current_user SERVER s1;
247247
DROP FOREIGN DATA WRAPPER foo; -- ERROR
248248
ERROR: cannot drop foreign-data wrapper foo because other objects depend on it
249249
DETAIL: server s1 depends on foreign-data wrapper foo
250-
user mapping for foreign_data_user depends on server s1
250+
user mapping for foreign_data_user on server s1 depends on server s1
251251
HINT: Use DROP ... CASCADE to drop the dependent objects too.
252252
SET ROLE regress_test_role;
253253
DROP FOREIGN DATA WRAPPER foo CASCADE; -- ERROR
@@ -256,7 +256,7 @@ RESET ROLE;
256256
DROP FOREIGN DATA WRAPPER foo CASCADE;
257257
NOTICE: drop cascades to 2 other objects
258258
DETAIL: drop cascades to server s1
259-
drop cascades to user mapping for foreign_data_user
259+
drop cascades to user mapping for foreign_data_user on server s1
260260
\dew+
261261
List of foreign-data wrappers
262262
Name | Owner | Handler | Validator | Access privileges | FDW Options | Description
@@ -528,10 +528,10 @@ CREATE USER MAPPING FOR current_user SERVER s3;
528528

529529
DROP SERVER s3; -- ERROR
530530
ERROR: cannot drop server s3 because other objects depend on it
531-
DETAIL: user mapping for foreign_data_user depends on server s3
531+
DETAIL: user mapping for foreign_data_user on server s3 depends on server s3
532532
HINT: Use DROP ... CASCADE to drop the dependent objects too.
533533
DROP SERVER s3 CASCADE;
534-
NOTICE: drop cascades to user mapping for foreign_data_user
534+
NOTICE: drop cascades to user mapping for foreign_data_user on server s3
535535
\des
536536
List of foreign servers
537537
Name | Owner | Foreign-data wrapper
@@ -1146,8 +1146,8 @@ GRANT USAGE ON FOREIGN SERVER s9 TO regress_test_role;
11461146
CREATE USER MAPPING FOR current_user SERVER s9;
11471147
DROP SERVER s9 CASCADE;
11481148
NOTICE: drop cascades to 2 other objects
1149-
DETAIL: drop cascades to user mapping for public
1150-
drop cascades to user mapping for unprivileged_role
1149+
DETAIL: drop cascades to user mapping for public on server s9
1150+
drop cascades to user mapping for unprivileged_role on server s9
11511151
RESET ROLE;
11521152
CREATE SERVER s9 FOREIGN DATA WRAPPER foo;
11531153
GRANT USAGE ON FOREIGN SERVER s9 TO unprivileged_role;
@@ -1172,14 +1172,14 @@ DROP ROLE regress_test_role; -- ERROR
11721172
ERROR: role "regress_test_role" cannot be dropped because some objects depend on it
11731173
DETAIL: privileges for server s4
11741174
privileges for foreign-data wrapper foo
1175-
owner of user mapping for regress_test_role
1176-
owner of user mapping for regress_test_role
1175+
owner of user mapping for regress_test_role on server s6
1176+
owner of user mapping for regress_test_role on server s5
11771177
owner of server s5
11781178
owner of server t2
11791179
DROP SERVER s5 CASCADE;
1180-
NOTICE: drop cascades to user mapping for regress_test_role
1180+
NOTICE: drop cascades to user mapping for regress_test_role on server s5
11811181
DROP SERVER t1 CASCADE;
1182-
NOTICE: drop cascades to user mapping for public
1182+
NOTICE: drop cascades to user mapping for public on server t1
11831183
DROP SERVER t2;
11841184
DROP USER MAPPING FOR regress_test_role SERVER s6;
11851185
-- This test causes some order dependent cascade detail output,
@@ -1190,8 +1190,8 @@ NOTICE: drop cascades to 5 other objects
11901190
\set VERBOSITY default
11911191
DROP SERVER s8 CASCADE;
11921192
NOTICE: drop cascades to 2 other objects
1193-
DETAIL: drop cascades to user mapping for foreign_data_user
1194-
drop cascades to user mapping for public
1193+
DETAIL: drop cascades to user mapping for foreign_data_user on server s8
1194+
drop cascades to user mapping for public on server s8
11951195
DROP ROLE regress_test_indirect;
11961196
DROP ROLE regress_test_role;
11971197
DROP ROLE unprivileged_role; -- ERROR

0 commit comments

Comments
 (0)