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

Commitbd01446

Browse files
committed
Try fixing restore command.
1 parent3e49dd1 commitbd01446

File tree

3 files changed

+33
-9
lines changed

3 files changed

+33
-9
lines changed

‎pg_arman.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,8 @@ main(int argc, char *argv[])
106106
cmd=argv[i];
107107
if(strcmp(cmd,"show")!=0&&
108108
strcmp(cmd,"validate")!=0&&
109-
strcmp(cmd,"delete")!=0)
109+
strcmp(cmd,"delete")!=0&&
110+
strcmp(cmd,"restore")!=0)
110111
break;
111112
}elseif (backup_id_string==NULL)
112113
backup_id_string=argv[i];
@@ -122,7 +123,12 @@ main(int argc, char *argv[])
122123
}
123124

124125
if (backup_id_string!=NULL)
126+
{
125127
backup_id=base36dec(backup_id_string);
128+
if (backup_id==0) {
129+
elog(ERROR,"wrong ID");
130+
}
131+
}
126132

127133
/* Read default configuration from file. */
128134
if (backup_path)
@@ -189,7 +195,7 @@ main(int argc, char *argv[])
189195
do_validate(current.start_time);
190196
}
191197
elseif (pg_strcasecmp(cmd,"restore")==0)
192-
returndo_restore(target_time,target_xid,
198+
returndo_restore(backup_id,target_time,target_xid,
193199
target_inclusive,target_tli);
194200
elseif (pg_strcasecmp(cmd,"show")==0)
195201
returndo_show(backup_id,show_all);

‎pg_arman.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,13 @@
3232
/* Directory/File names */
3333
#defineDATABASE_DIR"database"
3434
#defineRESTORE_WORK_DIR"backup"
35-
#definePG_XLOG_DIR"pg_xlog"
35+
#definePG_XLOG_DIR"pg_xlog"
3636
#definePG_TBLSPC_DIR"pg_tblspc"
3737
#defineBACKUP_INI_FILE"backup.ini"
3838
#definePG_RMAN_INI_FILE"pg_arman.ini"
3939
#defineMKDIRS_SH_FILE"mkdirs.sh"
4040
#defineDATABASE_FILE_LIST"file_database.txt"
41-
#definePG_BACKUP_LABEL_FILE"backup_label"
41+
#definePG_BACKUP_LABEL_FILE"backup_label"
4242
#definePG_BLACK_LIST"black_list"
4343

4444
/* Direcotry/File permission */
@@ -214,7 +214,8 @@ extern void process_block_change(ForkNumber forknum, RelFileNode rnode,
214214
BlockNumberblkno);
215215

216216
/* in restore.c */
217-
externintdo_restore(constchar*target_time,
217+
externintdo_restore(time_tbackup_id,
218+
constchar*target_time,
218219
constchar*target_xid,
219220
constchar*target_inclusive,
220221
TimeLineIDtarget_tli);

‎restore.c

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ static void restore_files(void *arg);
4545

4646

4747
int
48-
do_restore(constchar*target_time,
48+
do_restore(time_tbackup_id,
49+
constchar*target_time,
4950
constchar*target_xid,
5051
constchar*target_inclusive,
5152
TimeLineIDtarget_tli)
@@ -62,6 +63,7 @@ do_restore(const char *target_time,
6263
parray*timelines;
6364
pgRecoveryTarget*rt=NULL;
6465
XLogRecPtrneed_lsn;
66+
boolbackup_id_found= false;
6567

6668
/* PGDATA and ARCLOG_PATH are always required */
6769
if (pgdata==NULL)
@@ -134,12 +136,21 @@ do_restore(const char *target_time,
134136
{
135137
base_backup= (pgBackup*)parray_get(backups,i);
136138

139+
if (backup_id&&base_backup->start_time>backup_id)
140+
continue;
141+
142+
if (backup_id==base_backup->start_time&&
143+
base_backup->status==BACKUP_STATUS_OK
144+
)
145+
backup_id_found= true;
146+
137147
if (base_backup->backup_mode<BACKUP_MODE_FULL||
138148
base_backup->status!=BACKUP_STATUS_OK)
139149
continue;
140150

141151
if (satisfy_timeline(timelines,base_backup)&&
142-
satisfy_recovery_target(base_backup,rt))
152+
satisfy_recovery_target(base_backup,rt)&&
153+
(backup_id_found||backup_id==0))
143154
gotobase_backup_found;
144155
}
145156
/* no full backup found, cannot restore */
@@ -167,6 +178,9 @@ do_restore(const char *target_time,
167178
backup->tli!=base_backup->tli)
168179
continue;
169180

181+
if (backup->backup_mode==BACKUP_MODE_FULL)
182+
break;
183+
170184
/* use database backup only */
171185
if (backup->backup_mode!=BACKUP_MODE_DIFF_PAGE&&
172186
backup->backup_mode!=BACKUP_MODE_DIFF_PTRACK)
@@ -462,11 +476,14 @@ create_recovery_conf(const char *target_time,
462476

463477
if (target_time)
464478
fprintf(fp,"recovery_target_time = '%s'\n",target_time);
465-
if (target_xid)
479+
elseif (target_xid)
466480
fprintf(fp,"recovery_target_xid = '%s'\n",target_xid);
481+
else
482+
fprintf(fp,"recovery_target = 'immediate'\n");
483+
467484
if (target_inclusive)
468485
fprintf(fp,"recovery_target_inclusive = '%s'\n",target_inclusive);
469-
/*fprintf(fp, "recovery_target = 'immediate'\n");*/
486+
470487
fprintf(fp,"recovery_target_timeline = '%u'\n",target_tli);
471488

472489
fclose(fp);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp