Collection of cookbooks for Podman Quadlets
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

33 lines
1.3 KiB

#!/bin/bash
set -Eeuo pipefail
export PGHOST=/var/run/postgresql
BACKUP_DIR=/var/lib/postgresql/backup/$(date +%Y-%m-%d_%H-%M-%S)/
mkdir -p "$BACKUP_DIR"
echo "Starting complete backup of the whole PostgreSQL server..."
pg_basebackup --pgdata=$BACKUP_DIR --format=tar --manifest-checksums=SHA256 --verbose
echo "Starting backup of individual databases..."
psql -c "SELECT datname FROM pg_database WHERE datname NOT IN ('template0', 'template1', 'postgres');" -t | while read db; do
if [ -z "$db" ]; then
continue
fi
echo "Backup of database $db..."
pg_dump -c --if-exists "$db" | gzip -c > "$BACKUP_DIR/dump-$db.sql.gz"
done
echo "Backup stored in $BACKUP_DIR."
# backup rotation / retention policy
POSTGRES_BACKUP_RETENTION=${POSTGRES_BACKUP_RETENTION:-7}
if [[ "$POSTGRES_BACKUP_RETENTION" -gt 0 ]] && ls -1ct /var/lib/postgresql/backup/*/backup_manifest &>/dev/null; then
echo "Applying backup retention policy: keeping the last $POSTGRES_BACKUP_RETENTION backups."
ls -1ct /var/lib/postgresql/backup/*/backup_manifest | tail -n "+$((POSTGRES_BACKUP_RETENTION + 1))" | while read old_backup; do
old_backup=$(dirname "$old_backup")
echo "Removing old backup: $old_backup"
rm -rf "$old_backup"
done
else
echo "No backup retention policy applied."
fi