diff --git a/contrib/basic_archive/basic_archive.c b/contrib/basic_archive/basic_archive.c
index 6c7f985d48b..d46aab39806 100644
--- a/contrib/basic_archive/basic_archive.c
+++ b/contrib/basic_archive/basic_archive.c
@@ -95,8 +95,6 @@ _PG_archive_module_init(void)
 static bool
 check_archive_directory(char **newval, void **extra, GucSource source)
 {
-	struct stat st;
-
 	/*
 	 * The default value is an empty string, so we have to accept that value.
 	 * Our check_configured callback also checks for this and prevents
@@ -115,17 +113,6 @@ check_archive_directory(char **newval, void **extra, GucSource source)
 		return false;
 	}
 
-	/*
-	 * Do a basic sanity check that the specified archive directory exists. It
-	 * could be removed at some point in the future, so we still need to be
-	 * prepared for it not to exist in the actual archiving logic.
-	 */
-	if (stat(*newval, &st) != 0 || !S_ISDIR(st.st_mode))
-	{
-		GUC_check_errdetail("Specified archive directory does not exist.");
-		return false;
-	}
-
 	return true;
 }
 
@@ -137,12 +124,23 @@ check_archive_directory(char **newval, void **extra, GucSource source)
 static bool
 basic_archive_configured(ArchiveModuleState *state)
 {
-	if (archive_directory != NULL && archive_directory[0] != '\0')
-		return true;
+	struct stat st;
 
-	arch_module_check_errdetail("%s is not set.",
+	if (archive_directory == NULL || archive_directory[0] == '\0')
+	{
+		arch_module_check_errdetail("%s is not set.",
 								"basic_archive.archive_directory");
-	return false;
+
+		return false;
+	}
+
+	if (stat(archive_directory, &st) != 0 || !S_ISDIR(st.st_mode))
+	{
+		arch_module_check_errdetail("Specified archive directory does not exist.");
+		return false;
+	}
+
+	return true;
 }
 
 /*
