在 Linux 上,pgAdmin 的备份计划通常通过“图形化备份 + Cron 定时执行脚本”的组合来实现。下面给出可直接落地的步骤与模板,覆盖单机、容器与全库场景,并配套日志、保留与告警。
一、方案总览与前置准备
二、方案一 脚本化备份 + Cron(推荐)
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_NAME=mydb
BACKUP_DIR=/backups
RETENTION_DAYS=7
LOG_FILE=/var/log/pg_backup.log
#!/bin/bash
set -Eeuo pipefail
source /data/backup_config.env
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}_${TIMESTAMP}.dump"
mkdir -p "$BACKUP_DIR"
export PGPASSWORD="${PGPASSWORD:-}"
pg_dump --host="$DB_HOST" --port="$DB_PORT" --username="$DB_USER" \
--format=c --blobs --verbose --file="$BACKUP_FILE" "$DB_NAME"
echo "[$(date)] Backup completed: $BACKUP_FILE (size=$(stat -c%s "$BACKUP_FILE"))" >> "$LOG_FILE"
# 保留策略
find "$BACKUP_DIR" -name "${DB_NAME}_*.dump" -mtime +$RETENTION_DAYS -delete
chmod +x /usr/local/bin/pg_backup.sh
crontab -e
0 2 * * * /usr/local/bin/pg_backup.sh >> /var/log/pg_cron.log 2>&1
三、方案二 在 pgAdmin 图形界面中生成命令并脚本化
四、容器与特殊环境
#!/usr/bin/env bash
set -Eeuo pipefail
LOG=/var/log/pg_backup_docker.log
TS=$(date +%F_%H-%M-%S)
BACKUP_DIR=/backups
mkdir -p "$BACKUP_DIR"
echo "[$(date)] Start backup" >> "$LOG"
docker exec pgadmin4 /bin/sh -c '
export PGPASSWORD=postgres
/usr/local/pgsql-16/pg_dump --host 127.0.0.1 --port 5432 \
--username postgres --format=c --blobs --verbose \
--file "/var/lib/pgadmin/storage/pga_user_example.com/backup/db_'"$TS"'.backup" postgres
' >> "$LOG" 2>&1
echo "[$(date)] Done" >> "$LOG"
0 2 * * * /usr/local/bin/pg_back.sh
五、恢复、校验与运维要点
createdb -h localhost -p 5432 -U postgres mydb_restored
pg_restore -h localhost -p 5432 -U postgres -d mydb_restored mydb_20250101.dump