Back up a PostgreSQL database

Dump, compress, and keep only the last 14 backups.

bash intermediate #postgres#backups#cron
bash-pg-backup-rotate.sh
#!/usr/bin/env bash
set -Eeuo pipefail
: "${DATABASE_URL:?set DATABASE_URL}"

dir="/var/backups/app"
mkdir -p "$dir"
file="$dir/db-$(date +%F-%H%M).sql.gz"

pg_dump --no-owner --no-privileges "$DATABASE_URL" | gzip > "$file"
echo "saved $file ($(du -h "$file" | cut -f1))"

ls -1t "$dir"/db-*.sql.gz | tail -n +15 | xargs -r rm --
# cron: 15 2 * * * /opt/app/backup.sh >> /var/log/app-backup.log 2>&1