pg_start_stop_backup-1.patch
text/x-diff
Filename: pg_start_stop_backup-1.patch
Type: text/x-diff
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: context
| File | + | − |
|---|---|---|
| src/backend/access/transam/xlog.c | 25 | 0 |
*** a/src/backend/access/transam/xlog.c
--- b/src/backend/access/transam/xlog.c
***************
*** 8200,8217 **** pg_start_backup(PG_FUNCTION_ARGS)
errmsg("recovery is in progress"),
errhint("WAL control functions cannot be executed during recovery.")));
! if (!XLogArchivingActive())
! ereport(ERROR,
! (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
! errmsg("WAL archiving is not active"),
! errhint("archive_mode must be enabled at server start.")));
!
! if (!XLogArchiveCommandSet())
ereport(ERROR,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
! errmsg("WAL archiving is not active"),
! errhint("archive_command must be defined before "
! "online backups can be made safely.")));
backupidstr = text_to_cstring(backupid);
--- 8200,8210 ----
errmsg("recovery is in progress"),
errhint("WAL control functions cannot be executed during recovery.")));
! if (!XLogIsNeeded())
ereport(ERROR,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
! errmsg("WAL level not sufficient for making an online backup"),
! errhint("wal_level must be set to 'archive' or 'hot_standby' at server start.")));
backupidstr = text_to_cstring(backupid);
***************
*** 8399,8409 **** pg_stop_backup(PG_FUNCTION_ARGS)
errmsg("recovery is in progress"),
errhint("WAL control functions cannot be executed during recovery.")));
! if (!XLogArchivingActive())
ereport(ERROR,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
! errmsg("WAL archiving is not active"),
! errhint("archive_mode must be enabled at server start.")));
/*
* OK to clear forcePageWrites
--- 8392,8402 ----
errmsg("recovery is in progress"),
errhint("WAL control functions cannot be executed during recovery.")));
! if (!XLogIsNeeded())
ereport(ERROR,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
! errmsg("WAL level not sufficient for making an online backup"),
! errhint("wal_level must be set to 'archive' or 'hot_standby' at server start.")));
/*
* OK to clear forcePageWrites
***************
*** 8511,8526 **** pg_stop_backup(PG_FUNCTION_ARGS)
CleanupBackupHistory();
/*
! * Wait until both the last WAL file filled during backup and the history
! * file have been archived. We assume that the alphabetic sorting
! * property of the WAL files ensures any earlier WAL files are safely
! * archived as well.
*
* We wait forever, since archive_command is supposed to work and we
* assume the admin wanted his backup to work completely. If you don't
* wish to wait, you can set statement_timeout. Also, some notices are
* issued to clue in anyone who might be doing this interactively.
*/
XLByteToPrevSeg(stoppoint, _logId, _logSeg);
XLogFileName(lastxlogfilename, ThisTimeLineID, _logId, _logSeg);
--- 8504,8530 ----
CleanupBackupHistory();
/*
! * If archiving is enabled, wait for all the required WAL files to be
! * archived before returning. If archiving isn't enabled, the required
! * WAL needs to be transported via streaming replication (hopefully
! * with wal_keep_segments set high enough), or some more exotic
! * mechanism like polling and copying files from pg_xlog with script.
! * We have no control over those mechanisms, so it's up to the user to
! * ensure that he gets all the required WAL.
! *
! * We wait until both the last WAL file filled during backup and the
! * history file have been archived, and assume that the alphabetic
! * sorting property of the WAL files ensures any earlier WAL files are
! * safely archived as well.
*
* We wait forever, since archive_command is supposed to work and we
* assume the admin wanted his backup to work completely. If you don't
* wish to wait, you can set statement_timeout. Also, some notices are
* issued to clue in anyone who might be doing this interactively.
*/
+ if (XLogArchivingActive())
+ {
+ /* XXX: fix indentation before committing */
XLByteToPrevSeg(stoppoint, _logId, _logSeg);
XLogFileName(lastxlogfilename, ThisTimeLineID, _logId, _logSeg);
***************
*** 8559,8564 **** pg_stop_backup(PG_FUNCTION_ARGS)
--- 8563,8572 ----
ereport(NOTICE,
(errmsg("pg_stop_backup complete, all required WAL segments have been archived")));
+ }
+ else
+ ereport(NOTICE,
+ (errmsg("WAL archiving is not enabled, you must ensure that all required WAL segments are streamed or copied through other means to restore the backup")));
/*
* We're done. As a convenience, return the ending WAL location.