Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 5630f39

Browse files
committed
Prevent BASE_BACKUP in the middle of another backup in the same session.
Multiple non-exclusive backups are able to be run conrrently in different sessions. But, in the same session, only one non-exclusive backup can be run at the same moment. If pg_backup_start (pg_start_backup in v14 or before) is called in the middle of another non-exclusive backup in the same session, an error is thrown. However, previously, in logical replication walsender mode, even if that walsender session had already called pg_backup_start and started a non-exclusive backup, it could execute BASE_BACKUP command and start another non-exclusive backup. Which caused subsequent pg_backup_stop to throw an error because BASE_BACKUP unexpectedly reset the session state marked by pg_backup_start. This commit prevents BASE_BACKUP command in the middle of another non-exclusive backup in the same session. Back-patch to all supported branches. Author: Fujii Masao Reviewed-by: Kyotaro Horiguchi, Masahiko Sawada, Michael Paquier, Robert Haas Discussion: https://postgr.es/m/3374718f-9fbf-a950-6d66-d973e027f44c@oss.nttdata.com
1 parent b2c8d56 commit 5630f39

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

src/backend/replication/basebackup.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -927,6 +927,12 @@ void
927927
SendBaseBackup(BaseBackupCmd *cmd)
928928
{
929929
basebackup_options opt;
930+
SessionBackupState status = get_backup_status();
931+
932+
if (status == SESSION_BACKUP_NON_EXCLUSIVE)
933+
ereport(ERROR,
934+
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
935+
errmsg("a backup is already in progress in this session")));
930936

931937
parse_basebackup_options(cmd->options, &opt);
932938

0 commit comments

Comments
 (0)