diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm
index cb84f1f..556a506 100644
--- a/src/test/perl/PostgresNode.pm
+++ b/src/test/perl/PostgresNode.pm
@@ -139,7 +139,7 @@ sub new
 	my $self = {
 		_port    => $pgport,
 		_host    => $pghost,
-		_basedir => TestLib::tempdir("data_" . $name),
+		_basedir => TestLib::tempdir($testname . '_data_' . $name),
 		_name    => $name,
 		_logfile => "$TestLib::log_path/${testname}_${name}.log" };
 
diff --git a/src/test/perl/TestLib.pm b/src/test/perl/TestLib.pm
index da65c92..60819c7 100644
--- a/src/test/perl/TestLib.pm
+++ b/src/test/perl/TestLib.pm
@@ -115,8 +115,10 @@ INIT
 END
 {
 
-	# Preserve temporary directory for this test on failure
-	$File::Temp::KEEP_ALL = 1 unless all_tests_passing();
+	# Preserve temporary directory for this test on failure, or in case the
+	# user requested to retain the directories by defining KEEP_TMPCHECK
+	$File::Temp::KEEP_ALL = 1
+		unless all_tests_passing() && !defined $ENV{'KEEP_TMPCHECK'};
 }
 
 sub all_tests_passing
