#!/usr/bin/env bash set -euo pipefail TIMESTAMP=$(date +%Y%m%d%H%M%S) BACKUP_DIR=$(mktemp -d) trap 'rm -rf "$BACKUP_DIR"' EXIT # Import GPG key for encryption gpg --batch --import "${GPG_KEY_FILE}" DATABASES=$(psql -U postgres -t -c "SELECT datname FROM pg_database WHERE datistemplate = false AND datname != 'postgres';" | grep -v '^$') for DB in $DATABASES; do DB=$(echo "$DB" | xargs) echo "Backing up PostgreSQL database: $DB" FILENAME="pgsql_${DB}_${TIMESTAMP}.sql.gz.gpg" if pg_dump -U postgres -d "$DB" | gzip | gpg --batch --encrypt --recipient "${GPG_RECIPIENT}" > "$BACKUP_DIR/$FILENAME"; then gsutil cp "$BACKUP_DIR/$FILENAME" "gs://${GCS_BUCKET}/postgresql/$FILENAME" echo "Successfully uploaded encrypted $FILENAME" else echo "Failed to backup $DB" >&2 exit 1 fi done