#!/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 " && 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