36 lines
1013 B
Bash
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"
|