@@ -62,6 +62,13 @@ static char *target_time;
6262static char * target_xid ;
6363static char * target_inclusive ;
6464static TimeLineID target_tli ;
65+ static bool target_immediate ;
66+ static char * target_name = NULL ;
67+ static char * target_action = NULL ;;
68+
69+ static pgRecoveryTarget * recovery_target_options = NULL ;
70+
71+ bool restore_as_replica = false;
6572
6673/* delete options */
6774bool delete_wal = false;
@@ -132,6 +139,10 @@ static pgut_option options[] =
132139 { 's' , 22 , "inclusive" , & target_inclusive , SOURCE_CMDLINE },
133140 { 'u' , 23 , "timeline" , & target_tli , SOURCE_CMDLINE },
134141 { 'f' , 'T' , "tablespace-mapping" , opt_tablespace_map , SOURCE_CMDLINE },
142+ { 'b' , 24 , "immediate" , & target_immediate , SOURCE_CMDLINE },
143+ { 's' , 25 , "recovery-target-name" , & target_name , SOURCE_CMDLINE },
144+ { 's' , 26 , "recovery-target-action" , & target_action , SOURCE_CMDLINE },
145+ { 'b' , 'R' , "restore-as-replica" , & restore_as_replica , SOURCE_CMDLINE },
135146 /* delete options */
136147 { 'b' , 130 , "wal" , & delete_wal , SOURCE_CMDLINE },
137148 { 'b' , 131 , "expired" , & delete_expired , SOURCE_CMDLINE },
@@ -411,8 +422,13 @@ main(int argc, char *argv[])
411422 pgdata_exclude_dir [i ] = "pg_log" ;
412423 }
413424
414- if (target_time != NULL && target_xid != NULL )
415- elog (ERROR , "You can't specify recovery-target-time and recovery-target-xid at the same time" );
425+ if (backup_subcmd == VALIDATE || backup_subcmd == RESTORE )
426+ {
427+ /* parse all recovery target options into recovery_target_options structure */
428+ recovery_target_options = parseRecoveryTargetOptions (target_time , target_xid ,
429+ target_inclusive , target_tli , target_immediate ,
430+ target_name , target_action );
431+ }
416432
417433 if (num_threads < 1 )
418434 num_threads = 1 ;
@@ -448,16 +464,14 @@ main(int argc, char *argv[])
448464 }
449465 case RESTORE :
450466 return do_restore_or_validate (current .backup_id ,
451- target_time , target_xid ,
452- target_inclusive , target_tli ,
467+ recovery_target_options ,
453468 true);
454469 case VALIDATE :
455470 if (current .backup_id == 0 && target_time == 0 && target_xid == 0 )
456471 return do_validate_all ();
457472 else
458473 return do_restore_or_validate (current .backup_id ,
459- target_time , target_xid ,
460- target_inclusive , target_tli ,
474+ recovery_target_options ,
461475 false);
462476 case SHOW :
463477 return do_show (current .backup_id );
0 commit comments