#!/bin/sh set -e # Configuration BACKUP_DIR="/backups" TIMESTAMP=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="${BACKUP_DIR}/postgres_${POSTGRES_DB}_${TIMESTAMP}.sql.gz" RETENTION_DAYS=${BACKUP_RETENTION_DAYS:-7} echo "======================================" echo "PostgreSQL Backup - $(date)" echo "======================================" # Wait for PostgreSQL to be ready until PGPASSWORD="${POSTGRES_PASSWORD}" pg_isready -h "${POSTGRES_HOST}" -U "${POSTGRES_USER}" -d "${POSTGRES_DB}"; do echo "⏳ Waiting for PostgreSQL..." sleep 5 done echo "✅ PostgreSQL is ready" # Create backup echo "📦 Creating backup: ${BACKUP_FILE}" PGPASSWORD="${POSTGRES_PASSWORD}" pg_dump \ -h "${POSTGRES_HOST}" \ -U "${POSTGRES_USER}" \ -d "${POSTGRES_DB}" \ --clean \ --if-exists \ --create \ --no-owner \ --no-privileges \ | gzip > "${BACKUP_FILE}" # Verify backup was created if [ -f "${BACKUP_FILE}" ]; then BACKUP_SIZE=$(du -h "${BACKUP_FILE}" | cut -f1) echo "✅ Backup created successfully: ${BACKUP_SIZE}" else echo "❌ Backup failed!" exit 1 fi # Cleanup old backups echo "🗑️ Cleaning up backups older than ${RETENTION_DAYS} days..." find "${BACKUP_DIR}" -name "postgres_*.sql.gz" -type f -mtime +${RETENTION_DAYS} -delete # List current backups echo "" echo "📊 Current backups:" ls -lh "${BACKUP_DIR}"/postgres_*.sql.gz 2>/dev/null || echo "No backups found" echo "" echo "✅ Backup completed successfully" echo "======================================"