diff options
| -rw-r--r-- | src/bin/pg_dump/pg_backup_archiver.c | 38 | 
1 files changed, 23 insertions, 15 deletions
| diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c index d4b414fbcfe..791251313ad 100644 --- a/src/bin/pg_dump/pg_backup_archiver.c +++ b/src/bin/pg_dump/pg_backup_archiver.c @@ -204,6 +204,7 @@ void  RestoreArchive(Archive *AHX, RestoreOptions *ropt)  {  	ArchiveHandle *AH = (ArchiveHandle *) AHX; +	bool		parallel_mode;  	TocEntry   *te;  	teReqs		reqs;  	OutputContext sav; @@ -230,6 +231,27 @@ RestoreArchive(Archive *AHX, RestoreOptions *ropt)  		die_horribly(AH, modulename, "-C and -1 are incompatible options\n");  	/* +	 * If we're going to do parallel restore, there are some restrictions. +	 */ +	parallel_mode = (ropt->number_of_jobs > 1 && ropt->useDB); +	if (parallel_mode) +	{ +		/* We haven't got round to making this work for all archive formats */ +		if (AH->ClonePtr == NULL || AH->ReopenPtr == NULL) +			die_horribly(AH, modulename, "parallel restore is not supported with this archive file format\n"); + +		/* Doesn't work if the archive represents dependencies as OIDs */ +		if (AH->version < K_VERS_1_8) +			die_horribly(AH, modulename, "parallel restore is not supported with archives made by pre-8.0 pg_dump\n"); + +		/* +		 * It's also not gonna work if we can't reopen the input file, so +		 * let's try that immediately. +		 */ +		(AH->ReopenPtr) (AH); +	} + +	/*  	 * Make sure we won't need (de)compression we haven't got  	 */  #ifndef HAVE_LIBZ @@ -375,7 +397,7 @@ RestoreArchive(Archive *AHX, RestoreOptions *ropt)  	 *  	 * In parallel mode, turn control over to the parallel-restore logic.  	 */ -	if (ropt->number_of_jobs > 1 && ropt->useDB) +	if (parallel_mode)  		restore_toc_entries_parallel(AH);  	else  	{ @@ -3192,20 +3214,6 @@ restore_toc_entries_parallel(ArchiveHandle *AH)  	ahlog(AH, 2, "entering restore_toc_entries_parallel\n"); -	/* we haven't got round to making this work for all archive formats */ -	if (AH->ClonePtr == NULL || AH->ReopenPtr == NULL) -		die_horribly(AH, modulename, "parallel restore is not supported with this archive file format\n"); - -	/* doesn't work if the archive represents dependencies as OIDs, either */ -	if (AH->version < K_VERS_1_8) -		die_horribly(AH, modulename, "parallel restore is not supported with archives made by pre-8.0 pg_dump\n"); - -	/* -	 * It's also not gonna work if we can't reopen the input file, so let's -	 * try that immediately. -	 */ -	(AH->ReopenPtr) (AH); -  	slots = (ParallelSlot *) calloc(sizeof(ParallelSlot), n_slots);  	/* Adjust dependency information */ | 
