diff --git a/src/backend/utils/fmgr/dfmgr.c b/src/backend/utils/fmgr/dfmgr.c
index 4bb84ff7087..3eb791e541b 100644
--- a/src/backend/utils/fmgr/dfmgr.c
+++ b/src/backend/utils/fmgr/dfmgr.c
@@ -71,7 +71,7 @@ char	   *Dynamic_library_path;
 static void *internal_load_library(const char *libname);
 pg_noreturn static void incompatible_module_error(const char *libname,
 												  const Pg_abi_values *module_magic_data);
-static char *expand_dynamic_library_name(const char *name);
+static char *expand_dynamic_library_name(const char *name, const char *original_name);
 static void check_restricted_library_name(const char *name);
 
 /* ABI values that module needs to match to be accepted */
@@ -96,6 +96,7 @@ load_external_function(const char *filename, const char *funcname,
 					   bool signalNotFound, void **filehandle)
 {
 	char	   *fullname;
+	const char *original_name = filename;
 	void	   *lib_handle;
 	void	   *retval;
 
@@ -108,7 +109,7 @@ load_external_function(const char *filename, const char *funcname,
 		filename += 8;
 
 	/* Expand the possibly-abbreviated filename to an exact path name */
-	fullname = expand_dynamic_library_name(filename);
+	fullname = expand_dynamic_library_name(filename, original_name);
 
 	/* Load the shared library, unless we already did */
 	lib_handle = internal_load_library(fullname);
@@ -148,7 +149,7 @@ load_file(const char *filename, bool restricted)
 		check_restricted_library_name(filename);
 
 	/* Expand the possibly-abbreviated filename to an exact path name */
-	fullname = expand_dynamic_library_name(filename);
+	fullname = expand_dynamic_library_name(filename, filename);
 
 	/* Load the shared library, unless we already did */
 	(void) internal_load_library(fullname);
@@ -456,7 +457,7 @@ get_loaded_module_details(DynamicFileList *dfptr,
  * The result will always be freshly palloc'd.
  */
 static char *
-expand_dynamic_library_name(const char *name)
+expand_dynamic_library_name(const char *name, const char *original_name)
 {
 	bool		have_slash;
 	char	   *new;
@@ -474,16 +475,16 @@ expand_dynamic_library_name(const char *name)
 	}
 	else
 	{
-		full = substitute_path_macro(name, "$libdir", pkglib_path);
+		full = substitute_path_macro(original_name, "$libdir", pkglib_path);
 		if (pg_file_exists(full))
 			return full;
 		pfree(full);
 	}
 
-	new = psprintf("%s%s", name, DLSUFFIX);
-
 	if (!have_slash)
 	{
+		new = psprintf("%s%s", name, DLSUFFIX);
+
 		full = find_in_path(new, Dynamic_library_path, "dynamic_library_path", "$libdir", pkglib_path);
 		pfree(new);
 		if (full)
@@ -491,6 +492,8 @@ expand_dynamic_library_name(const char *name)
 	}
 	else
 	{
+		new = psprintf("%s%s", original_name, DLSUFFIX);
+
 		full = substitute_path_macro(new, "$libdir", pkglib_path);
 		pfree(new);
 		if (pg_file_exists(full))
