34 lines
974 B
Bash
Executable File
34 lines
974 B
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
umask 077
|
|
|
|
backup_directory="${1:-storage/app/backups}"
|
|
mkdir -p "$backup_directory"
|
|
|
|
database_name="$(docker compose exec -T postgres printenv POSTGRES_DB)"
|
|
database_user="$(docker compose exec -T postgres printenv POSTGRES_USER)"
|
|
|
|
if [[ ! "$database_name" =~ ^[A-Za-z0-9_]+$ ]] || [[ ! "$database_user" =~ ^[A-Za-z0-9_]+$ ]]; then
|
|
echo "Nome de base de dados ou utilizador inválido." >&2
|
|
exit 1
|
|
fi
|
|
|
|
timestamp="$(date -u +%Y%m%dT%H%M%SZ)"
|
|
backup_path="${backup_directory%/}/reserva-${timestamp}.dump"
|
|
temporary_path="${backup_path}.partial"
|
|
|
|
docker compose exec -T postgres pg_dump \
|
|
--username="$database_user" \
|
|
--dbname="$database_name" \
|
|
--format=custom \
|
|
--no-owner \
|
|
--no-privileges > "$temporary_path"
|
|
|
|
docker compose exec -T postgres pg_restore --list < "$temporary_path" > /dev/null
|
|
mv "$temporary_path" "$backup_path"
|
|
shasum -a 256 "$backup_path" > "${backup_path}.sha256"
|
|
|
|
echo "$backup_path"
|