Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| bf1722c316 | |||
| a759f4d3db | |||
| 7cf1d6f85b | |||
| b305d1342e | |||
| 5456da7183 |
@@ -4,8 +4,8 @@ This directory contains pre-compiled binaries for the DB Backup Tool across mult
|
|||||||
|
|
||||||
## Build Information
|
## Build Information
|
||||||
- **Version**: 3.42.50
|
- **Version**: 3.42.50
|
||||||
- **Build Time**: 2026-01-18_17:17:17_UTC
|
- **Build Time**: 2026-01-18_20:23:55_UTC
|
||||||
- **Git Commit**: a0a401c
|
- **Git Commit**: a759f4d
|
||||||
|
|
||||||
## Recent Updates (v1.1.0)
|
## Recent Updates (v1.1.0)
|
||||||
- ✅ Fixed TUI progress display with line-by-line output
|
- ✅ Fixed TUI progress display with line-by-line output
|
||||||
|
|||||||
@@ -445,6 +445,12 @@ func (c *Config) ApplyResourceProfile(profileName string) error {
|
|||||||
|
|
||||||
// Apply profile settings
|
// Apply profile settings
|
||||||
c.ResourceProfile = profile.Name
|
c.ResourceProfile = profile.Name
|
||||||
|
|
||||||
|
// If LargeDBMode is enabled, apply its modifiers
|
||||||
|
if c.LargeDBMode {
|
||||||
|
profile = cpu.ApplyLargeDBMode(profile)
|
||||||
|
}
|
||||||
|
|
||||||
c.ClusterParallelism = profile.ClusterParallelism
|
c.ClusterParallelism = profile.ClusterParallelism
|
||||||
c.Jobs = profile.Jobs
|
c.Jobs = profile.Jobs
|
||||||
c.DumpJobs = profile.DumpJobs
|
c.DumpJobs = profile.DumpJobs
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ type LocalConfig struct {
|
|||||||
// Performance settings
|
// Performance settings
|
||||||
CPUWorkload string
|
CPUWorkload string
|
||||||
MaxCores int
|
MaxCores int
|
||||||
ClusterTimeout int // Cluster operation timeout in minutes (default: 1440 = 24 hours)
|
ClusterTimeout int // Cluster operation timeout in minutes (default: 1440 = 24 hours)
|
||||||
ResourceProfile string
|
ResourceProfile string
|
||||||
LargeDBMode bool // Enable large database mode (reduces parallelism, increases locks)
|
LargeDBMode bool // Enable large database mode (reduces parallelism, increases locks)
|
||||||
|
|
||||||
|
|||||||
@@ -39,8 +39,8 @@ type BackupExecutionModel struct {
|
|||||||
cancelling bool // True when user has requested cancellation
|
cancelling bool // True when user has requested cancellation
|
||||||
err error
|
err error
|
||||||
result string
|
result string
|
||||||
archivePath string // Path to created archive (for summary)
|
archivePath string // Path to created archive (for summary)
|
||||||
archiveSize int64 // Size of created archive (for summary)
|
archiveSize int64 // Size of created archive (for summary)
|
||||||
startTime time.Time
|
startTime time.Time
|
||||||
elapsed time.Duration // Final elapsed time
|
elapsed time.Duration // Final elapsed time
|
||||||
details []string
|
details []string
|
||||||
@@ -63,8 +63,8 @@ type sharedBackupProgressState struct {
|
|||||||
dbTotal int
|
dbTotal int
|
||||||
dbDone int
|
dbDone int
|
||||||
dbName string
|
dbName string
|
||||||
overallPhase int // 1=globals, 2=databases, 3=compressing
|
overallPhase int // 1=globals, 2=databases, 3=compressing
|
||||||
phaseDesc string // Description of current phase
|
phaseDesc string // Description of current phase
|
||||||
hasUpdate bool
|
hasUpdate bool
|
||||||
phase2StartTime time.Time // When phase 2 started (for realtime ETA calculation)
|
phase2StartTime time.Time // When phase 2 started (for realtime ETA calculation)
|
||||||
dbPhaseElapsed time.Duration // Elapsed time since database backup phase started
|
dbPhaseElapsed time.Duration // Elapsed time since database backup phase started
|
||||||
|
|||||||
@@ -152,8 +152,8 @@ type sharedProgressState struct {
|
|||||||
currentDB string
|
currentDB string
|
||||||
|
|
||||||
// Timing info for database restore phase
|
// Timing info for database restore phase
|
||||||
dbPhaseElapsed time.Duration // Elapsed time since restore phase started
|
dbPhaseElapsed time.Duration // Elapsed time since restore phase started
|
||||||
dbAvgPerDB time.Duration // Average time per database restore
|
dbAvgPerDB time.Duration // Average time per database restore
|
||||||
phase3StartTime time.Time // When phase 3 started (for realtime ETA calculation)
|
phase3StartTime time.Time // When phase 3 started (for realtime ETA calculation)
|
||||||
|
|
||||||
// Overall phase tracking (1=Extract, 2=Globals, 3=Databases)
|
// Overall phase tracking (1=Extract, 2=Globals, 3=Databases)
|
||||||
@@ -1171,12 +1171,12 @@ func formatRestoreError(errStr string) string {
|
|||||||
|
|
||||||
// Provide specific recommendations based on error
|
// Provide specific recommendations based on error
|
||||||
if strings.Contains(errStr, "out of shared memory") || strings.Contains(errStr, "max_locks_per_transaction") {
|
if strings.Contains(errStr, "out of shared memory") || strings.Contains(errStr, "max_locks_per_transaction") {
|
||||||
s.WriteString(errorStyle.Render(" • Cannot access file: stat : no such file or directory\n"))
|
s.WriteString(errorStyle.Render(" • PostgreSQL lock table exhausted\n"))
|
||||||
s.WriteString("\n")
|
s.WriteString("\n")
|
||||||
s.WriteString(infoStyle.Render(" ─── [HINT] Recommendations ────────────────────────────────"))
|
s.WriteString(infoStyle.Render(" ─── [HINT] Recommendations ────────────────────────────────"))
|
||||||
s.WriteString("\n\n")
|
s.WriteString("\n\n")
|
||||||
s.WriteString(" Lock table exhausted. Total capacity = max_locks_per_transaction\n")
|
s.WriteString(" Lock capacity = max_locks_per_transaction\n")
|
||||||
s.WriteString(" × (max_connections + max_prepared_transactions).\n\n")
|
s.WriteString(" × (max_connections + max_prepared_transactions)\n\n")
|
||||||
s.WriteString(" If you reduced VM size or max_connections, you need higher\n")
|
s.WriteString(" If you reduced VM size or max_connections, you need higher\n")
|
||||||
s.WriteString(" max_locks_per_transaction to compensate.\n\n")
|
s.WriteString(" max_locks_per_transaction to compensate.\n\n")
|
||||||
s.WriteString(successStyle.Render(" FIX OPTIONS:\n"))
|
s.WriteString(successStyle.Render(" FIX OPTIONS:\n"))
|
||||||
|
|||||||
Reference in New Issue
Block a user