#!/usr/bin/env bash # pre-change pg_dump — plan ds-s1-backend-1 E-3. # A-1(migration 287) / B-4 backfill 적용 *전* 안전망. repo cp -p 가 아니라 진짜 DB 덤프. # # 사용 (GPU 서버, repo 루트에서): # bash scripts/s1_pre_change_backup.sh # pre-A-1 # bash scripts/s1_pre_change_backup.sh pre-b4 # pre-B-4 (라벨만 다름) # # 백업 위치 = repo 밖 (feedback_backup_outside_repo): $HOME/.local/share/ds-s1-backups/ set -euo pipefail LABEL="${1:-pre-a1}" DATE="$(date +%Y%m%d-%H%M%S)" BACKUP_DIR="${BACKUP_DIR:-$HOME/.local/share/ds-s1-backups}" mkdir -p "$BACKUP_DIR" OUT="$BACKUP_DIR/pkm-${LABEL}-${DATE}.sql.gz" echo "[s1-backup] pg_dump pkm → $OUT" # 단일 pkm DB 덤프(pg_dumpall 아님). gzip 은 redirect(파일명 추측 함정 회피). docker compose exec -T postgres pg_dump -U pkm -d pkm | gzip > "$OUT" echo "[s1-backup] done: $(du -h "$OUT" | cut -f1)" echo -n "[s1-backup] gzip 무결성: " gzip -t "$OUT" && echo "OK" echo echo "[s1-backup] 롤백 옵션:" echo " (a) 287 컬럼만 되돌림(빠름): scripts/rollback_287.sql 수동 실행" echo " (b) 전체 복원: gunzip -c '$OUT' | docker compose exec -T postgres psql -U pkm -d pkm" echo "[s1-backup] 보존 7일 권장. (DR-grade 검증은 ephemeral restore — D5 트랙, 본 안전망 범위 밖.)"