pg_upgrade: suppress creation of delete script
Suppress creation of the pg_upgrade delete script when the new data directory is inside the old data directory. Reported-by: IRC Backpatch-through: 9.3, where delete script tests were added
This commit is contained in:
parent
48e6c943e5
commit
3386f34cdc
@ -195,9 +195,10 @@ output_completion_banner(char *analyze_script_file_name,
|
|||||||
deletion_script_file_name);
|
deletion_script_file_name);
|
||||||
else
|
else
|
||||||
pg_log(PG_REPORT,
|
pg_log(PG_REPORT,
|
||||||
"Could not create a script to delete the old cluster's data\n"
|
"Could not create a script to delete the old cluster's data files\n"
|
||||||
"files because user-defined tablespaces exist in the old cluster\n"
|
"because user-defined tablespaces or the new cluster's data directory\n"
|
||||||
"directory. The old cluster's contents must be deleted manually.\n");
|
"exist in the old cluster directory. The old cluster's contents must\n"
|
||||||
|
"be deleted manually.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -496,18 +497,35 @@ create_script_for_old_cluster_deletion(char **deletion_script_file_name)
|
|||||||
{
|
{
|
||||||
FILE *script = NULL;
|
FILE *script = NULL;
|
||||||
int tblnum;
|
int tblnum;
|
||||||
char old_cluster_pgdata[MAXPGPATH];
|
char old_cluster_pgdata[MAXPGPATH], new_cluster_pgdata[MAXPGPATH];
|
||||||
|
|
||||||
*deletion_script_file_name = psprintf("%sdelete_old_cluster.%s",
|
*deletion_script_file_name = psprintf("%sdelete_old_cluster.%s",
|
||||||
SCRIPT_PREFIX, SCRIPT_EXT);
|
SCRIPT_PREFIX, SCRIPT_EXT);
|
||||||
|
|
||||||
|
strlcpy(old_cluster_pgdata, old_cluster.pgdata, MAXPGPATH);
|
||||||
|
canonicalize_path(old_cluster_pgdata);
|
||||||
|
|
||||||
|
strlcpy(new_cluster_pgdata, new_cluster.pgdata, MAXPGPATH);
|
||||||
|
canonicalize_path(new_cluster_pgdata);
|
||||||
|
|
||||||
|
/* Some people put the new data directory inside the old one. */
|
||||||
|
if (path_is_prefix_of_path(old_cluster_pgdata, new_cluster_pgdata))
|
||||||
|
{
|
||||||
|
pg_log(PG_WARNING,
|
||||||
|
"\nWARNING: new data directory should not be inside the old data directory, e.g. %s\n", old_cluster_pgdata);
|
||||||
|
|
||||||
|
/* Unlink file in case it is left over from a previous run. */
|
||||||
|
unlink(*deletion_script_file_name);
|
||||||
|
pg_free(*deletion_script_file_name);
|
||||||
|
*deletion_script_file_name = NULL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Some users (oddly) create tablespaces inside the cluster data
|
* Some users (oddly) create tablespaces inside the cluster data
|
||||||
* directory. We can't create a proper old cluster delete script in that
|
* directory. We can't create a proper old cluster delete script in that
|
||||||
* case.
|
* case.
|
||||||
*/
|
*/
|
||||||
strlcpy(old_cluster_pgdata, old_cluster.pgdata, MAXPGPATH);
|
|
||||||
canonicalize_path(old_cluster_pgdata);
|
|
||||||
for (tblnum = 0; tblnum < os_info.num_old_tablespaces; tblnum++)
|
for (tblnum = 0; tblnum < os_info.num_old_tablespaces; tblnum++)
|
||||||
{
|
{
|
||||||
char old_tablespace_dir[MAXPGPATH];
|
char old_tablespace_dir[MAXPGPATH];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user