#!/usr/bin/env bash set -euo pipefail if [[ -z "${PRIMARY_DATABASE_URL:-}" ]]; then echo "PRIMARY_DATABASE_URL is required (replication-capable connection string)." exit 1 fi BACKUP_DIR="${BACKUP_DIR:-./backups/postgres/base}" RETENTION_DAYS="${RETENTION_DAYS:-7}" TIMESTAMP="$(date -u +%Y%m%dT%H%M%SZ)" WORK_DIR="${BACKUP_DIR}/fiddy_base_${TIMESTAMP}" ARCHIVE_PATH="${BACKUP_DIR}/fiddy_base_${TIMESTAMP}.tar.gz" mkdir -p "$BACKUP_DIR" echo "Creating base backup directory snapshot..." pg_basebackup \ --dbname="$PRIMARY_DATABASE_URL" \ --pgdata="$WORK_DIR" \ --format=plain \ --wal-method=stream \ --checkpoint=fast \ --write-recovery-conf \ --progress \ --verbose echo "Compressing base backup..." tar -C "$BACKUP_DIR" -czf "$ARCHIVE_PATH" "fiddy_base_${TIMESTAMP}" rm -rf "$WORK_DIR" echo "Pruning base backups older than ${RETENTION_DAYS} days..." find "$BACKUP_DIR" -type f -name "fiddy_base_*.tar.gz" -mtime "+${RETENTION_DAYS}" -delete echo "Base backup complete: $ARCHIVE_PATH"