fiddy/scripts/basebackup-postgres.sh

36 lines
1013 B
Bash

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