@@ -181,7 +181,7 @@ do_restore_or_validate(time_t target_backup_id, pgRecoveryTarget *rt,
181181 if ((current_backup -> status == BACKUP_STATUS_ORPHAN ||
182182 current_backup -> status == BACKUP_STATUS_CORRUPT ||
183183 current_backup -> status == BACKUP_STATUS_RUNNING )
184- && !params -> no_validate )
184+ && ( !params -> no_validate || params -> force ) )
185185 elog (WARNING , "Backup %s has status: %s" ,
186186 base36enc (current_backup -> start_time ), status2str (current_backup -> status ));
187187 else
@@ -421,9 +421,19 @@ do_restore_or_validate(time_t target_backup_id, pgRecoveryTarget *rt,
421421 elog (INFO , "Backup %s is valid." , base36enc (dest_backup -> start_time ));
422422 }
423423 else if (dest_backup -> status == BACKUP_STATUS_CORRUPT )
424- elog (ERROR , "Backup %s is corrupt." , base36enc (dest_backup -> start_time ));
424+ {
425+ if (params -> force )
426+ elog (WARNING , "Backup %s is corrupt." , base36enc (dest_backup -> start_time ));
427+ else
428+ elog (ERROR , "Backup %s is corrupt." , base36enc (dest_backup -> start_time ));
429+ }
425430 else if (dest_backup -> status == BACKUP_STATUS_ORPHAN )
426- elog (ERROR , "Backup %s is orphan." , base36enc (dest_backup -> start_time ));
431+ {
432+ if (params -> force )
433+ elog (WARNING , "Backup %s is orphan." , base36enc (dest_backup -> start_time ));
434+ else
435+ elog (ERROR , "Backup %s is orphan." , base36enc (dest_backup -> start_time ));
436+ }
427437 else
428438 elog (ERROR , "Backup %s has status: %s" ,
429439 base36enc (dest_backup -> start_time ), status2str (dest_backup -> status ));
@@ -552,8 +562,14 @@ restore_backup(pgBackup *backup, parray *dest_external_dirs,
552562
553563 if (backup -> status != BACKUP_STATUS_OK &&
554564 backup -> status != BACKUP_STATUS_DONE )
555- elog (ERROR , "Backup %s cannot be restored because it is not valid" ,
556- base36enc (backup -> start_time ));
565+ {
566+ if (params -> force )
567+ elog (WARNING , "Backup %s is not valid, restore is forced" ,
568+ base36enc (backup -> start_time ));
569+ else
570+ elog (ERROR , "Backup %s cannot be restored because it is not valid" ,
571+ base36enc (backup -> start_time ));
572+ }
557573
558574 /* confirm block size compatibility */
559575 if (backup -> block_size != BLCKSZ )
0 commit comments