zkt26/sk1/backup.sh

33 lines
1.3 KiB
Bash

#!/usr/bin/env bash
# backup.sh — TaskFlow — PostgreSQL backup and restore via Azure CLI
set -euo pipefail
BACKUP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/backups"
TIMESTAMP="$(date +%Y%m%d-%H%M%S)"
BACKUP_FILE="${BACKUP_DIR}/taskflow-${TIMESTAMP}.sql"
# Load config from .env if present
[ -f "$(dirname "${BASH_SOURCE[0]}")/.env" ] && source "$(dirname "${BASH_SOURCE[0]}")/.env"
[[ -z "${POSTGRES_HOST:-}" ]] && echo "Set POSTGRES_HOST" && exit 1
[[ -z "${POSTGRES_USER:-}" ]] && echo "Set POSTGRES_USER" && exit 1
[[ -z "${POSTGRES_PASSWORD:-}" ]] && echo "Set POSTGRES_PASSWORD" && exit 1
[[ -z "${POSTGRES_DB:-}" ]] && echo "Set POSTGRES_DB" && exit 1
if [[ "${1:-}" == "--restore" ]]; then
FILE="${2:-}"; [[ -z "$FILE" ]] && echo "Usage: ./backup.sh --restore <file>" && exit 1
PGPASSWORD="${POSTGRES_PASSWORD}" psql \
-h "${POSTGRES_HOST}" -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" \
--set=sslmode=require < "$FILE"
echo "Restored from: $FILE"
exit 0
fi
mkdir -p "$BACKUP_DIR"
PGPASSWORD="${POSTGRES_PASSWORD}" pg_dump \
-h "${POSTGRES_HOST}" -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" \
--clean --if-exists --no-password \
> "$BACKUP_FILE"
echo "Backup saved: $BACKUP_FILE"
ls -1t "$BACKUP_DIR"/taskflow-*.sql 2>/dev/null | tail -n +11 | xargs rm -f 2>/dev/null || true