fix: skip target database check for cluster restores

- Cluster restores restore multiple databases, not a single target
- Database existence check was failing with exit status 2
- Now shows "Will restore all databases from cluster backup" instead
- Removes confusing warning for cluster restore operations
This commit is contained in:
2025-11-07 10:18:39 +00:00
parent de13fdfafd
commit 07400f2828
3 changed files with 19 additions and 12 deletions

View File

@ -146,20 +146,27 @@ func runSafetyChecks(cfg *config.Config, log logger.Logger, archive ArchiveInfo,
}
checks = append(checks, check)
// 4. Target database check
check = SafetyCheck{Name: "Target database", Status: "checking", Critical: false}
exists, err := safety.CheckDatabaseExists(ctx, targetDB)
if err != nil {
check.Status = "warning"
check.Message = fmt.Sprintf("Cannot check: %v", err)
} else if exists {
check.Status = "warning"
check.Message = fmt.Sprintf("Database '%s' exists - will be overwritten if clean-first enabled", targetDB)
// 4. Target database check (skip for cluster restores)
if !archive.Format.IsClusterBackup() {
check = SafetyCheck{Name: "Target database", Status: "checking", Critical: false}
exists, err := safety.CheckDatabaseExists(ctx, targetDB)
if err != nil {
check.Status = "warning"
check.Message = fmt.Sprintf("Cannot check: %v", err)
} else if exists {
check.Status = "warning"
check.Message = fmt.Sprintf("Database '%s' exists - will be overwritten if clean-first enabled", targetDB)
} else {
check.Status = "passed"
check.Message = fmt.Sprintf("Database '%s' does not exist - will be created", targetDB)
}
checks = append(checks, check)
} else {
check.Status = "passed"
check.Message = fmt.Sprintf("Database '%s' does not exist - will be created", targetDB)
// For cluster restores, just show a general message
check = SafetyCheck{Name: "Cluster restore", Status: "passed", Critical: false}
check.Message = "Will restore all databases from cluster backup"
checks = append(checks, check)
}
checks = append(checks, check)
return safetyCheckCompleteMsg{checks: checks, canProceed: canProceed}
}