33 lines
1.3 KiB
Bash
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
|