20 lines
598 B
Bash
20 lines
598 B
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
BACKUP_DIR="${BACKUP_DIR:-./backups/postgres}"
|
|
RETENTION_DAYS="${RETENTION_DAYS:-14}"
|
|
TIMESTAMP="$(date -u +%Y%m%dT%H%M%SZ)"
|
|
FILE_PATH="${BACKUP_DIR}/postgres-${TIMESTAMP}.dump"
|
|
|
|
if [[ -z "${DATABASE_URL:-}" ]]; then
|
|
echo "DATABASE_URL is required" >&2
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "${BACKUP_DIR}"
|
|
pg_dump --format=custom --file="${FILE_PATH}" "${DATABASE_URL}"
|
|
ln -sfn "$(basename "${FILE_PATH}")" "${BACKUP_DIR}/latest.dump"
|
|
find "${BACKUP_DIR}" -type f -name 'postgres-*.dump' -mtime +"${RETENTION_DAYS}" -delete
|
|
|
|
echo "Postgres backup written to ${FILE_PATH}"
|