From e3a9f2dfb72654092a199985003eb070c1fbfea8 Mon Sep 17 00:00:00 2001 From: ssongliu <73214554+ssongliu@users.noreply.github.com> Date: Tue, 5 Aug 2025 18:21:18 +0800 Subject: [PATCH] fix: Fix PostgreSQL database recovery failures (#9867) --- agent/utils/postgresql/client/local.go | 2 +- agent/utils/postgresql/client/remote.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/agent/utils/postgresql/client/local.go b/agent/utils/postgresql/client/local.go index 9e1a26705..6cf23a409 100644 --- a/agent/utils/postgresql/client/local.go +++ b/agent/utils/postgresql/client/local.go @@ -167,7 +167,7 @@ func (r *Local) Recover(info RecoverInfo) error { ctx, cancel := context.WithTimeout(context.Background(), time.Duration(info.Timeout*uint(time.Second))) defer cancel() cmd := exec.CommandContext(ctx, "docker", "exec", "-i", r.ContainerName, "sh", "-c", - fmt.Sprintf("PGPASSWORD=%s pg_restore -F c -U %s -d %s", r.Password, r.Username, info.Name), + fmt.Sprintf("PGPASSWORD=%s pg_restore -F c -c --if-exists --no-owner -U %s -d %s", r.Password, r.Username, info.Name), ) if strings.HasSuffix(info.SourceFile, ".gz") { gzipFile, err := os.Open(info.SourceFile) diff --git a/agent/utils/postgresql/client/remote.go b/agent/utils/postgresql/client/remote.go index 52bde7e30..6cf682297 100644 --- a/agent/utils/postgresql/client/remote.go +++ b/agent/utils/postgresql/client/remote.go @@ -177,7 +177,7 @@ func (r *Remote) Recover(info RecoverInfo) error { }() } recoverCommand := exec.Command("bash", "-c", - fmt.Sprintf("docker run --rm --net=host -i %s /bin/bash -c 'PGPASSWORD=\"%s\" pg_restore -h %s -p %d --verbose --clean --no-privileges --no-owner -Fc -U %s -d %s --role=%s' < %s", + fmt.Sprintf("docker run --rm --net=host -i %s /bin/bash -c 'PGPASSWORD=\"%s\" pg_restore -h %s -p %d --verbose --clean --no-privileges --no-owner -Fc -c --if-exists --no-owner -U %s -d %s --role=%s' < %s", imageTag, r.Password, r.Address, r.Port, r.User, info.Name, info.Username, fileName)) pipe, _ := recoverCommand.StdoutPipe() stderrPipe, _ := recoverCommand.StderrPipe()