원샷: pg_dump 백업 + gzip + 보관 기간(rotate)
PostgreSQL 단일 DB를 pg_dump로 백업하고, 압축/삭제 기준까지 포함한 스크립트
관련 가이드: 백업 설계: 복구 가능 + secrets 제외
관련 용어: pg_dump
스크립트 예시
인증은
~/.pgpass또는 전용 계정/권한으로 분리하는 편이 안전합니다.
export DB_NAME="appdb"
export OUT_DIR="/var/backups/postgres"
export KEEP_DAYS="7"
sudo bash -euo pipefail <<'BASH'
set -euo pipefail
: "${DB_NAME:?DB_NAME is required}"
: "${OUT_DIR:?OUT_DIR is required}"
: "${KEEP_DAYS:?KEEP_DAYS is required}"
ts="$(date +%Y%m%d_%H%M%S)"
mkdir -p "$OUT_DIR"
pg_dump --format=custom --no-owner --no-privileges "$DB_NAME" \
| gzip -9 >"$OUT_DIR/${DB_NAME}_${ts}.dump.gz"
find "$OUT_DIR" -type f -name "${DB_NAME}_*.dump.gz" -mtime +"$KEEP_DAYS" -delete
echo "done: $OUT_DIR/${DB_NAME}_${ts}.dump.gz"
BASH
복구 리허설(최소)
createdb restore_test
gunzip -c /var/backups/postgres/appdb_YYYYMMDD_HHMMSS.dump.gz | pg_restore -d restore_test