Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit85fedf3

Browse files
committed
pg_upgrade: generate check error for left-over new tablespace
Previously, if pg_upgrade failed, and the user recreated the cluster butdid not remove the new cluster tablespace directory, a later pg_upgradewould fail since the new tablespace directory would already exists.This adds error reporting for this during check.Reported-by: Justin PryzbyDiscussion:https://postgr.es/m/20200925005531.GJ23631@telsasoft.comBackpatch-through: 9.5
1 parented4a1c8 commit85fedf3

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

‎src/bin/pg_upgrade/check.c

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ static void check_for_isn_and_int8_passing_mismatch(ClusterInfo *cluster);
2626
staticvoidcheck_for_reg_data_type_usage(ClusterInfo*cluster);
2727
staticvoidcheck_for_jsonb_9_4_usage(ClusterInfo*cluster);
2828
staticvoidcheck_for_pg_role_prefix(ClusterInfo*cluster);
29+
staticvoidcheck_for_new_tablespace_dir(ClusterInfo*new_cluster);
2930
staticchar*get_canonical_locale_name(intcategory,constchar*locale);
3031

3132

@@ -155,6 +156,8 @@ check_new_cluster(void)
155156
check_is_install_user(&new_cluster);
156157

157158
check_for_prepared_transactions(&new_cluster);
159+
160+
check_for_new_tablespace_dir(&new_cluster);
158161
}
159162

160163

@@ -493,6 +496,43 @@ create_script_for_cluster_analyze(char **analyze_script_file_name)
493496
}
494497

495498

499+
/*
500+
* A previous run of pg_upgrade might have failed and the new cluster
501+
* directory recreated, but they might have forgotten to remove
502+
* the new cluster's tablespace directories. Therefore, check that
503+
* new cluster tablespace directories do not already exist. If
504+
* they do, it would cause an error while restoring global objects.
505+
* This allows the failure to be detected at check time, rather than
506+
* during schema restore.
507+
*
508+
* Note, v8.4 has no tablespace_suffix, which is fine so long as the
509+
* version being upgraded *to* has a suffix, since it's not allowed
510+
* to pg_upgrade from a version to the same version if tablespaces are
511+
* in use.
512+
*/
513+
staticvoid
514+
check_for_new_tablespace_dir(ClusterInfo*new_cluster)
515+
{
516+
charnew_tablespace_dir[MAXPGPATH];
517+
518+
prep_status("Checking for new cluster tablespace directories");
519+
520+
for (inttblnum=0;tblnum<os_info.num_old_tablespaces;tblnum++)
521+
{
522+
structstatstatbuf;
523+
524+
snprintf(new_tablespace_dir,MAXPGPATH,"%s%s",
525+
os_info.old_tablespaces[tblnum],
526+
new_cluster->tablespace_suffix);
527+
528+
if (stat(new_tablespace_dir,&statbuf)==0||errno!=ENOENT)
529+
pg_fatal("new cluster tablespace directory already exists: \"%s\"\n",
530+
new_tablespace_dir);
531+
}
532+
533+
check_ok();
534+
}
535+
496536
/*
497537
* create_script_for_old_cluster_deletion()
498538
*

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp