pg_upgrade: error if run from top of new PGDATA on Windows

Print a clear error message in this case, rather than wait for initdb
--sync-only to generate a "Permission denied" error.
This commit is contained in:
Bruce Momjian 2014-08-15 12:03:49 -04:00
parent ef153ecc55
commit e4c3c99ac3

View File

@ -229,6 +229,26 @@ parseCommandLine(int argc, char *argv[])
"PGDATAOLD", "-d", "old cluster data resides"); "PGDATAOLD", "-d", "old cluster data resides");
check_required_directory(&new_cluster.pgdata, &new_cluster.pgconfig, check_required_directory(&new_cluster.pgdata, &new_cluster.pgconfig,
"PGDATANEW", "-D", "new cluster data resides"); "PGDATANEW", "-D", "new cluster data resides");
#ifndef WIN32
/*
* On Windows, initdb --sync-only will fail with a "Permission denied"
* error on file pg_upgrade_utility.log if pg_upgrade is run inside
* the new cluster directory, so we do a check here.
*/
{
char cwd[MAXPGPATH], new_cluster_pgdata[MAXPGPATH];
strlcpy(new_cluster_pgdata, new_cluster.pgdata, MAXPGPATH);
canonicalize_path(new_cluster_pgdata);
if (!getcwd(cwd, MAXPGPATH))
pg_fatal("cannot find current directory\n");
canonicalize_path(cwd);
if (path_is_prefix_of_path(new_cluster_pgdata, cwd))
pg_fatal("cannot run pg_upgrade from inside the new cluster data directory on Windows\n");
}
#endif
} }