Skip to content

Commit 1deff6c

Browse files
committed
Improve error handling when executing pg_dump command
1 parent 070cf49 commit 1deff6c

2 files changed

Lines changed: 44 additions & 2 deletions

File tree

backup.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,8 @@ func (b *PostgresBackup) doPostgresBackup() (string, error) {
192192
}
193193
}(gzipWriter)
194194

195-
cmd.Stdout = gzipWriter
195+
var stdout bytes.Buffer
196+
cmd.Stdout = &stdout
196197
var stderr bytes.Buffer
197198
cmd.Stderr = &stderr
198199

@@ -203,7 +204,7 @@ func (b *PostgresBackup) doPostgresBackup() (string, error) {
203204
if err = cmd.Run(); err != nil {
204205
// Remove partial file on failure
205206
_ = os.Remove(outfile)
206-
slog.Error("Failed to execute pg_dump with compression", "error", err, "output", stderr)
207+
slog.Error("Failed to execute pg_dump", "error", err, "stderr", stderr.String(), "stdout", stdout.String())
207208
err = fmt.Errorf("pg_dump failed %w", err)
208209
return "", err
209210
}
@@ -216,6 +217,12 @@ func newPostgresBackup(cfg *config.Config) (*PostgresBackup, error) {
216217
tempDir: "/tmp",
217218
}
218219

220+
// Check that the temp directory exists
221+
_, err := os.Stat(pb.tempDir)
222+
if err != nil {
223+
return nil, fmt.Errorf("failed to access temp directory: %w", err)
224+
}
225+
219226
// Initialize S3 client if S3 is configured
220227
if cfg.S3.Bucket != "" {
221228
s3Cfg := storage.S3Config{

test/compose.yaml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
services:
2+
backup:
3+
build:
4+
context: ../
5+
links:
6+
- db
7+
depends_on:
8+
- db
9+
environment:
10+
POSTGRES_HOST: "db"
11+
POSTGRES_DATABASE: "postgres"
12+
POSTGRES_USER: "postgres"
13+
POSTGRES_PASSWORD: "testpass"
14+
POSTGRES_EXTRA_OPTS: '-Z1 --schema=public --blobs'
15+
SCHEDULE: "@daily"
16+
RUN_AT_STARTUP: "true"
17+
S3_REGION: ""
18+
S3_ACCESS_KEY_ID: "example"
19+
S3_SECRET_ACCESS_KEY: "example"
20+
S3_BUCKET: "test-bucket"
21+
S3_PREFIX: "backup"
22+
S3_ENDPOINT: "fsn1.your-objectstorage.com"
23+
db:
24+
container_name: db
25+
image: postgres:17
26+
environment:
27+
POSTGRES_PASSWORD: testpass
28+
POSTGRES_USER: postgres
29+
ports:
30+
- "6000:5432"
31+
restart: unless-stopped
32+
healthcheck:
33+
test: [ "CMD-SHELL", "pg_isready -h localhost -U $$POSTGRES_USER" ]
34+
interval: 2s
35+
start_period: 30s

0 commit comments

Comments
 (0)