Moving this logic into pg_regress fixes a potential failure with
 parallel tests when pg_upgrade and the main regression test suite both
 trigger the makefile rule that cleaned up testtablespace/ under
 src/test/regress.  Even if pg_upgrade was triggering this rule, it has
 no need to do so as it uses a different tablespace path.  So if
 pg_upgrade triggered the makefile rule for the tablespace setup while
 the main regression test suite ran the tablespace cases, it would fail.  
61be85a was a similar attempt at achieving that, but that broke cases
 where the regression tests require to run under an Administrator
 account, like with Appveyor.  
Reported-by: Andres Freund, Kyotaro Horiguchi Reviewed-by: Peter Eisentraut Discussion: https://postgr.es/m/
20201209012911.uk4d6nxcnkp7ehrx@alap3.anarazel.de  
        EXTRA_REGRESS_OPTS="$EXTRA_REGRESS_OPTS --outputdir=$outputdir"
  export EXTRA_REGRESS_OPTS
  mkdir "$outputdir"
 -mkdir "$outputdir"/testtablespace
  
  logdir=`pwd`/log
  rm -rf "$logdir"
          
  .PHONY: submake-contrib-spi
  
 -# Tablespace setup
 -
 -.PHONY: tablespace-setup
 -tablespace-setup:
 -   rm -rf ./testtablespace
 -   mkdir ./testtablespace
 -
  
  ##
  ## Run tests
   
  REGRESS_OPTS = --dlpath=. --max-concurrent-tests=20 $(EXTRA_REGRESS_OPTS)
  
 -check: all tablespace-setup
 +check: all
     $(pg_regress_check) $(REGRESS_OPTS) --schedule=$(srcdir)/parallel_schedule $(MAXCONNOPT) $(EXTRA_TESTS)
  
 -check-tests: all tablespace-setup | temp-install
 +check-tests: all | temp-install
     $(pg_regress_check) $(REGRESS_OPTS) $(MAXCONNOPT) $(TESTS) $(EXTRA_TESTS)
  
 -installcheck: all tablespace-setup
 +installcheck: all
     $(pg_regress_installcheck) $(REGRESS_OPTS) --schedule=$(srcdir)/serial_schedule $(EXTRA_TESTS)
  
 -installcheck-parallel: all tablespace-setup
 +installcheck-parallel: all
     $(pg_regress_installcheck) $(REGRESS_OPTS) --schedule=$(srcdir)/parallel_schedule $(MAXCONNOPT) $(EXTRA_TESTS)
  
 -installcheck-tests: all tablespace-setup
 +installcheck-tests: all
     $(pg_regress_installcheck) $(REGRESS_OPTS) $(TESTS) $(EXTRA_TESTS)
  
  standbycheck: all
   runtest: installcheck
  runtest-parallel: installcheck-parallel
  
 -bigtest: all tablespace-setup
 +bigtest: all
     $(pg_regress_installcheck) $(REGRESS_OPTS) --schedule=$(srcdir)/serial_schedule numeric_big
  
 -bigcheck: all tablespace-setup | temp-install
 +bigcheck: all | temp-install
     $(pg_regress_check) $(REGRESS_OPTS) --schedule=$(srcdir)/parallel_schedule $(MAXCONNOPT) numeric_big
  
  
          
     snprintf(testtablespace, MAXPGPATH, "%s/testtablespace", outputdir);
  
 -#ifdef WIN32
 -
     /*
 -    * On Windows only, clean out the test tablespace dir, or create it if it
 -    * doesn't exist so as it is possible to run the regression tests as a
 -    * Windows administrative user account with the restricted token obtained
 -    * when starting pg_regress.  On other platforms we expect the Makefile to
 -    * take care of that.
 +    * Clean out the test tablespace dir, or create it if it doesn't exist. On
 +    * Windows, doing this cleanup here makes possible to run the regression
 +    * tests as a Windows administrative user account with the restricted
 +    * token obtained when starting pg_regress.
      */
     if (directory_exists(testtablespace))
 +   {
         if (!rmtree(testtablespace, true))
         {
             fprintf(stderr, _("\n%s: could not remove test tablespace \"%s\"\n"),
                     progname, testtablespace);
             exit(2);
         }
 +   }
     make_directory(testtablespace);
 -#endif
  
     /* finally loop on each file and do the replacement */
     for (name = names; *name; name++)
             my $outputdir          = "$tmp_root/regress";
     my @EXTRA_REGRESS_OPTS = ("--outputdir=$outputdir");
     mkdir "$outputdir"                || die $!;
 -   mkdir "$outputdir/testtablespace" || die $!;
  
     my $logdir = "$topdir/src/bin/pg_upgrade/log";
     rmtree($logdir);